我在hive的每个分区中都有900万条记录,我有两个分区。该表有20列。现在我想基于id列比较分区之间的数据集。考虑到自我加入900万条记录会产生性能问题,这是最好的方法。
答案 0 :(得分:0)
您可以尝试SMB加入 - 它主要是合并两个排序列表。但是在这种情况下,您需要再创建两个表。
另一种选择是编写一个UDF来做同样的事情 - 这将是项目本身。第一种选择更容易。
答案 1 :(得分:0)
您是否尝试过自我加入并让它失败?只要您正确指定连接条件,我就不会认为它应该是一个问题。对于Hive来说,900万行实际上没那么多。它可以通过将连接条件用作reduce键来处理大型连接,因此它实际上并不是完整的笛卡尔积。
select a.foo, b.foo
from my_table a
full outer join my_table b
on a.id <=> b.id
where a.partition = 'x' and b.partition = 'y'
答案 2 :(得分:0)
要对2个表进行全面比较(或比较同一个表的2个分区),我的经验告诉我,使用一些校验和机制是一种比加入表更有效和可靠的解决方案(这会给你带来性能问题)提到了,并且在例如重复键时也给出了一些困难。
你可以看看这个处理Hive表比较的Python程序(比较所有行和所有列),并在网页中显示可能出现的差异:https://github.com/bolcom/hive_compared_bq。< / p>
在您的情况下,您将使用该程序指定“2个要比较的表”是相同的并使用“--source-where”和“--destination-where”来指示您要比较的分区。 “ - group-by-column”选项也可用于指定“id”列。