我正在尝试从另一个没有今天日期列的表中插入 Hive 表。我试图创建的分区是在日期级别。我想要做的是这样的:
INSERT OVERWRITE TABLE table_2_partition
PARTITION (p_date = from_unixtime(unix_timestamp() - (86400*2) , 'yyyy-MM-dd'))
SELECT * FROM table_1;
Run Code Online (Sandbox Code Playgroud)
但是当我运行它时,我收到以下错误:
"cannot recognize input near 'from_unixtime' '(' 'unix_timestamp' in constant"
Run Code Online (Sandbox Code Playgroud)
如果我查询一个表并使其工作正常的列之一。知道如何在 HiveQL 中将分区日期设置为当前系统日期吗?
提前致谢,
克雷格
这里你想要的是 Hive动态分区。这允许在选择记录时动态确定每个记录插入到哪个分区。就您而言,该决定基于您运行查询的日期。
要使用动态分区,您的分区子句具有分区字段,但没有值。映射到分区字段的值是 , 末尾的值SELECT,并且顺序相同。
当您对所有分区字段使用动态分区时,您需要确保您使用的nonstrict是动态分区模式 ( hive.exec.dynamic.partition.mode)。
在您的情况下,您的查询将类似于:
SET hive.exec.dynamic.partition.mode=nonstrict;
INSERT OVERWRITE TABLE table_2_partition
PARTITION (p_date)
SELECT
*
, from_unixtime(unix_timestamp() - (86400*2) , 'yyyy-MM-dd')
FROM table_1;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3679 次 |
| 最近记录: |