快速对分区的配置单元表进行增量更新

时间:2014-01-11 07:07:20

标签: hadoop hive etl partition

我有两个蜂巢表T1和T2。 T1是按列date1,hour1分区的外部表。它还有另一个名为date2的日期列(与date1不同)。

T2是由date2分区的配置单元表。

我会每小时递增一次数据,我可以使用动态分区轻松地将其添加到表T1中。

我想要一种有效的方法从T1中选择数据并逐步将数据加载到T2中,并按日期2进行分区。

这就是我现在正在做的事情

insert into T2

select
    *,
    date2
from

    (
      select * from T1 where date1="a constant date" and hour1 = "a constant hour"
    ) T1SubQuery
left outer join
    T2
on
    T1SubQuery.idColumn = T2.idColumn
where
    T2.idColumn is null

我正在做一个左外连接和“T1.idColumn为空”,以模拟“不在哪里”。我这样做是为了避免重复数据,查询可以运行多次,我希望它是幂等的。

问题

  1. 此查询中将使用T2中的哪些分区?如何最小化使用的分区数?

  2. 执行此类幂等增量数据加载的最有效方法是什么?

1 个答案:

答案 0 :(得分:0)

  1. 所有分区都应该在T2上受到影响,因为你的where条件不会过滤掉

  2. 更典型的方法是在T2中创建与T1中的新分区对应的新分区,并将数据从t1插入到这些分区上的t2中。您使用的策略不是为了速度而构建的,而是为了从T1中找到丢失数据并插入它们的专门目的。这可能不是进行更大容量/批量插入的最佳方式。