1

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

T2 是一个按 date2 分区的 Hive 表。

我将每小时递增地获取数据,并且可以轻松地将其添加到具有动态分区的表 T1 中。

我想要一种有效的方法来从 T1 中选择数据并将数据增量加载到 T2 中,按 date2 分区。

这就是我现在正在做的

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. 进行这种幂等增量数据加载的最有效方法是什么?

4

1 回答 1

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

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

于 2014-01-23T12:58:59.040 回答