我有两个Hive表t1和t2。t1是一个按列date1(hour1)分区的外部表。它还有另一个名为date2的日期列(与date1不同)。
t2是按date2分区的配置单元表。
我将每小时以增量方式获取数据,并且我可以很容易地使用动态分区将其添加到表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
我正在做一个左外连接和“where t1.idcolumn is null”来模拟“where not in”。我这样做是为了避免重复数据,查询可以运行多次,我希望它是幂等的。
问题
t2中的哪些分区将用于此查询?如何最小化使用的分区数?
进行这种幂等增量数据加载最有效的方法是什么?
1条答案
按热度按时间pod7payv1#
所有分区都应该在t2上受到影响,因为where条件不会过滤掉它们
更典型的方法是在t2中创建与t1中的新分区相对应的新分区,并将t1中的数据插入到这些分区上的t2中。您所使用的策略并不是为了速度而构建的,而是为了从t1中找到丢失的数据并插入它们。这可能不是进行大批量插入的最佳方法。