我有一个日期分区的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)
| 归档时间: |
|
| 查看次数: |
13679 次 |
| 最近记录: |