sql - Hive表加入更新

标签 sql hadoop hive hql jointable

我有点卡住,任何人都可以在这里帮助我。我有两个具有以下结构的表。

Table 1
Id String
Code1 String
Code2 String

Table 2
Id String
UserCode String
UniversalCode String

我需要做的是用表2中的UniversalCode替换code1和code2中的所有值。更明确地说,如果code1与UserCode匹配,则用UniversalCode替换Code1;如果code2与usercode匹配,则再次对同一记录替换,然后替换为通用代码。如果不匹配,则保留code1和code2的值。我需要具有表1中的所有记录。表1和表2通过ID连接。

我在下面尝试了一列,但在添加代码2时卡住了
SELECT 
Id,
CASE WHEN a.Code1 = b.UserCode then b.UniversalCode else a.Code1 end
from table1 a
LEFT OUTER JOIN table2 b ON (a.Id = b.Id and a.code1 = b.UserCode);

有什么建议可以做到这一点吗? ,实际情况有5-6列,我需要应用相同的逻辑。
Test Data 

Table 1
1,123,ABCD
1,ABCD,123
1,456,BCD
1,BCD,789
1,789,100

Table 2 
1,123,XXX
1,456,YYY
1,789,ZZZ
2,123,XXX
2,456,YYY
2,789,ZZZ

Output 
1,XXX,ABCD
1,ABCD,XXX
1,YYY,BCD
1,BCD,ZZZ
1,ZZZ,100


output with a.id=b.id in Join(Please refer below comments for this output)
1       123     XXX     100     100
1       123     123     100     100
1       123     123     100     100
1       ABCD    ABCD    101     101
1       ABCD    ABCD    101     101
1       ABCD    ABCD    101     101
1       456     456     DEF     DEF
1       456     YYY     DEF     DEF
1       456     456     DEF     DEF
1       BCD     BCD     789     789
1       BCD     BCD     789     789
1       BCD     BCD     789     ZZZ
1       789     789     CDE     CDE
1       789     789     CDE     CDE
1       789     ZZZ     CDE     CDE
1       100     100     HBT     HBT
1       100     100     HBT     HBT
1       100     100     HBT     HBT
1       100     100     123     XXX
1       100     100     123     123
1       100     100     123     123

最佳答案

我不确定我是否了解您,但是类似的方法应该可以为您提供帮助。

SELECT 
     a.Id
   , CASE WHEN a.Code1 = b.UserCode THEN b.UniversalCode ELSE a.Code1 END AS Code1
   , CASE WHEN a.Code2 = b.UserCode THEN b.UniversalCode ELSE a.Code2 END AS Code2
FROM    table1 a
    LEFT OUTER JOIN 
        table2 b 
        ON a.Id = b.Id;

关于sql - Hive表加入更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33420962/

相关文章:

sql - 每组 LIMIT - Google BigQuery/标准 SQL

java - Hadoop 从映射器写入新文件

scala - 使用hadoop和spark在Azure上使用WordCount

hadoop - hadoop 中的交叉积和阅读标题

hadoop - HDFS中的Apache默认Hive Warehouse路径

java - 从 Tomcat 中的池中中止/清除无效的数据库连接

mysql - 如果需要多个约束,是否需要为每列使用单独的外键表?

php - SQL 查询根据month_year 获取行

jdbc - Hadoop Hive - 如何将 'add jar' 用于 Hive JDBC 客户端?

hadoop - 错误ql.Driver(SessionState.java:printError(419))-失败:执行错误,从org.apache.hadoop.hive.ql.exec.mr.MapRedTask返回代码-101