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;
我对配置单元分区的理解可能有差距。我有一个按日期分区的外部 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;