Hive:插入覆盖多个分区

rah*_*hul 7 hadoop hive

我有一个日期分区的Hive表.我希望能够有选择地覆盖最近'n'天(或自定义分区列表)的分区.

有没有办法在不为每个分区编写"INSERT OVERWRITE DIRECTORY"语句的情况下执行此操作?

任何帮助是极大的赞赏.

lib*_*ack 21

Hive支持动态分区,因此您可以构建一个查询,其中分区只是源字段之一.

INSERT OVERWRITE TABLE dst partition (dt) 
SELECT col0, col1, ... coln, dt from src where ...
Run Code Online (Sandbox Code Playgroud)

where子句可以指定要覆盖的dt值.

只需在源列表中包含最后一个分区字段(在本例中为dt),SELECT *, dt如果dt字段已经是源的一部分甚至SELECT *,my_udf(dt) as dt是等等,你甚至可以这样做

默认情况下,Hive希望至少有一个指定的分区是静态的,但是你可以允许它是非严格的 ; 所以对于上面的查询,你可以在运行之前设置以下内容:

set hive.exec.dynamic.partition.mode=nonstrict;
Run Code Online (Sandbox Code Playgroud)