优化配置单元中的多个连接

时间:2018-06-04 11:12:39

标签: hive bigdata hiveql hadoop2

我有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列中的重复值是正确的

2 个答案:

答案 0 :(得分:0)

表格相当大,在这种情况下,地图连接不是一个选项。 如果one A to many Bone 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)

不确定这是否是最佳方法。 我已经为在公共列上分区的所有表创建了中间分区表。 现在对于每个分区,我已逐步运行连接查询。