我必须在Hive中使用左外连接方法连接两个表。请在下面找到我的表格详细信息和所需的输出,
道歉以获得重大解释。我提供了所有信息,以便更清楚地表达我的怀疑。
表1列:
date1, srcid, claimno1
Date1 srcid claimno1
31-01-2015 ABC 432
31-01-2015 ABC 451
31-01-2015 ABC 435
01-02-2015 ABC 451
表2列:
date2,claimno2,amount
Date2 claimno1 amount
31-01-2015 432 150.51
01-02-2015 451 250.61
31-02-2015 451 320.72
01-02-2015 432 381.65
必填项:
Date1 srcid claimno1 amount
31-01-2015 ABC 432 381.65
31-01-2015 ABC 451 250.61
31-01-2015 ABC 432 381.65
01-02-2015 ABC 451 NULL
条件:
1)从table1需要选择日期为31-01-2015的记录
2)从table2需要选择日期为01-02-2015的记录
假设:
1)来自table1的claimno1不是唯一的,并且对于相同的date1
多次出现2)table2的claimno2对于特定的date2
是唯一的疑惑:
1)我是否需要在GROUP BY中提供所有选定的列? (否则会出现SemanticException错误)
2)当我在WHERE子句和ON子句中使用相同的条件时有什么区别?
我使用了以下查询,但无法获得所需的输出,
SELECT
a.date1, a.srcid, a.claimno1, b.amount
FROM
table1 a
LEFT OUTER JOIN
tableb ON (a.claimno1 = b.claimno2)
WHERE
a.date1 = '31-01-2015'
AND b.date2 = '01-02-2015'
GROUP BY a.date1 , a.srcid;
失败: SemanticException [错误10002]:无效的列引用'claimno1'
SELECT
a.date1, a.srcid, a.claimno1, b.amount
FROM
table1 a
LEFT OUTER JOIN
tableb ON (a.claimno1 = b.claimno2)
WHERE
a.date1 = '31-01-2015'
AND b.date2 = '01-02-2015'
GROUP BY a.date1 , a.srcid , a.claimno1;
失败: SemanticException [错误10002]:无效的列引用'amount'
SELECT
a.date1, a.srcid, a.claimno1, b.amount
FROM
table1 a
LEFT OUTER JOIN
tableb ON (a.claimno1 = b.claimno2)
WHERE
a.date1 = '31-01-2015'
AND b.date2 = '01-02-2015'
GROUP BY a.date1 , a.srcid , a.claimno1 , b.amount;
结果:未选择任何记录
SELECT
a.date1, a.srcid, a.claimno1, b.amount
FROM
table1 a
LEFT OUTER JOIN
tableb ON (a.claimno1 = b.claimno2
AND a.date1 = '31-01-2015'
AND b.date2 = '01-02-2015')
GROUP BY a.date1 , a.srcid , a.claimno1 , b.amount;
结果:已选择记录,但金额值为NULL
道歉以获得重大解释。我提供了所有信息,以便更清楚地表达我的怀疑。
提前致谢。