我有4个四个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的父(一对多外键关系)
现在我必须加入这些表格;什么是加入这些表的最佳方法
我需要创建一个表E,其中包含A,B,C,D列,A,B,C列中的重复值是正确的
答案 0 :(得分:0)
表格相当大,在这种情况下,地图连接不是一个选项。
如果one A to many B
和one B to many C
以及one C to many D
并且您同时加入它们,那么显然这样的连接会导致巨大的行乘法。
这是非常正常的连接行为。假设A
有10个密钥且B
每个密钥在A
中有100行,那么在加入它们之后,它将是10 x 100 = 1000
行(如果A
中的连接密钥如果A
中的连接键不唯一,则更加独特)。这导致连接减速器上的巨大数据集
我想你的最终目标是聚合行。在这种情况下,最好的方法是将行预先聚合到所需的谷物并加入聚合数据集:
select A.*, B.* --aggregate here if necessary
(select <some aggregation here > from A group by <key> ) A
join
(select <some aggregation here > from B group by <key> ) B
on A.key=B.key
and so on...
答案 1 :(得分:0)
不确定这是否是最佳方法。 我已经为在公共列上分区的所有表创建了中间分区表。 现在对于每个分区,我已逐步运行连接查询。