我有 2 个表,Table1 有 41 列和超过 1 亿条记录,Table2 有 20 列和 1000 万条记录。
我使用以下查询来验证记录。
查询01。
SELECT count(*) FROM table1 t1 JOIN table2 t2 ON (
t1.c_id = t2.c_id AND
t1.e_id = t2.e_id AND
t1.o_id = t2.o_id
)
查询02。
SELECT count(*) FROM table1 t1 JOIN table2 t2 ON (
t1.c_id = t2.c_id AND
t1.e_id = t2.e_id AND
t1.o_id = t2.o_id
) GROUP BY t2.c_id
问题是,查询 01 计数与查询 02(总和)不匹配。有人可以指出这里的问题吗?
有运行在AWS EMR Hive 3.1.3-amzn-0版本上
查询 01 和查询 02 之间的计数差异可能是由于您在查询 02 中对结果进行分组的方式造成的。在查询 01 中,您只是计算两个表之间匹配记录的总数,而在查询02,您按 t2.c_id 进行分组,然后计算每个组内的记录。
这意味着,如果 table2 中有多个具有相同 t2.c_id 的记录与 table1 中的单个记录匹配,则查询 02 会将它们计为该 t2.c_id 的一个匹配项,而查询 01 会将每个单独的匹配项计为一个匹配项。