Hive 按日期分区——一次处理多个日期?

Hive Partitioned by Date -- Processing multiple dates at a time?

我对配置单元分区的理解可能有差距。我有一个按日期分区的外部 table。我正在通过托管配置单元 table 上的查询生成镶木地板文件。我目前 运行 一个 bash 脚本按日期递增处理(提供给查询)。有没有更好的方法来处理多个日期?

Table 是这样创建的:

set hive.exec.dynamic.partition=true;
set hive.exec.dynamic.partition.mode=nonstrict;

CREATE EXTERNAL TABLE my_table (id int, product string)
PARTITIONED BY (dt string)
LOCATION '/path/to/location'

我的 bash 脚本本质上是迭代日期并通过以下方式插入数据:

INSERT OVERWRITE TABLE my_table (dt='2020-07-09')
SELECT id, product FROM managed_table WHERE dt = '2020-07-09';

所以这行得通,但它只是一天一次,似乎效率不高。有没有更好的方法?

您正在使用静态分区插入记录。为了做动态分区, 在插入数据时,您可以如下定义动态分区。您还需要设置配置单元动态分区规则。这是启用动态分区所必需的。

set hive.exec.dynamic.partition=true;
set hive.exec.dynamic.partition.mode=nonstrict;

INSERT OVERWRITE INTO TABLE my_table PARTITION(dt)
SELECT 
 id, 
 product,
 dt
FROM managed_table;

更多关于 dynamic partition in hive