Apache Hive -程序相同的查询,但不同的结果,为什么?

rmbxnbpk  于 2023-11-18  发布在  Hive
关注(0)|答案(1)|浏览(241)

关注点01.

我有2个表Table 1有41列和超过100 mil的记录,Table 2有20列和10 mil的记录。
我使用了以下查询来验证记录。
查询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(总和)不匹配。有人能指出这里的问题吗?

关注02.

除了上面的2个表之外,还有一个表(客户端)只包含c_id。
查询03。

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
) WHERE t2.c_id IN ("client_id1", "client_id1", ...);


查询04。

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
) WHERE t2.c_id IN (SELECT DISTINCT c_id FROM client);


在查询03中,我对c_id进行了硬编码,而在查询04中,我要求Hive从client表中获取ID。如果我们假设在这两种情况下c_id是相同的,您认为查询中会有任何计数差异吗?
因为我注意到,当我对查询03中的c_id进行硬编码时,结果计数低于查询04中的c_id。如果我在这些查询中犯了错误,或者可能存在数据问题,请告诉我。
另外,如果我需要为两个查询获得相同的答案,我需要对查询进行哪些更改?
它们在AWS EMR Hive 3.1.3-amzn-0版本上运行

5jdjgkvh

5jdjgkvh1#

查询01和查询02之间的计数差异可能是由于您在查询02中对结果进行分组的方式造成的。在查询01中,您只是计算两个表之间匹配记录的总数,而在查询02中,您按t2.c_id分组,然后计算每个组中的记录。
这意味着,如果表2中有多条记录具有与表1中的单个记录匹配的相同t2.c_id,则查询02将它们计数为该t2.c_id的一个匹配,而查询01计数每个单独的匹配。

关注点二

要确保两个查询获得相同的计数,您需要确保c_ids的列表相同,并且客户端表中没有重复项。此外,还需要确保没有影响结果的数据质量问题。如有必要,您可能需要验证客户端表的内容,以确认它符合您的期望。

相关问题