我有四张Hive桌:
A - 1.2 billion records and 250 GB
B - 4 billion records and 1 TB
C - 30 billion records and 2 TB
D - 2 billion records and 100 GB
所有表都没有分区a是b(一对多外键关系)的父级,b是c(一对多外键关系)的父级,c是d(一对多外键关系)的父级
现在我必须加入这些表格;连接这些表的最佳方法是什么
我需要用a,b,c,d的列创建一个表e,a,b,c的列中的重复值可以
2条答案
按热度按时间2w2cym1i1#
表相当大,在这种情况下,map join不是一个选项。如果
one A to many B
以及one B to many C
以及one C to many D
同时连接它们,很明显这样的连接会导致大量的行乘法。这是很正常的连接行为。说如果A
有10把钥匙和B
中每个键有100行A
那么加入他们之后10 x 100 = 1000
行(如果join键在A
是唯一的),如果加入A
不是唯一的。这将导致join reducer上的大量数据集。我想您的最终目标是聚合行。在这种情况下,最好的方法是将行预聚合到所需的粒度,并连接聚合的数据集:
rnmwe5a22#
不确定这是不是最好的方法。我已经为在公共列上分区的所有表创建了中间分区表。现在,对于每个分区,我都以增量方式运行join查询。