Hive - 分区列等于当前日期

标签 hive hiveql

我正在尝试从另一个没有今天日期列的表中插入 Hive 表。我试图创建的分区是在日期级别。我想要做的是这样的:

INSERT OVERWRITE TABLE table_2_partition 
PARTITION (p_date = from_unixtime(unix_timestamp() - (86400*2) ,  'yyyy-MM-dd'))
SELECT * FROM table_1;

但是当我运行它时,我收到以下错误:
"cannot recognize input near 'from_unixtime' '(' 'unix_timestamp' in constant"

如果我查询一个表并使其工作正常的列之一。知道如何在 HiveQL 中将分区日期设置为当前系统日期吗?

提前致谢,

克雷格

最佳答案

您想要的是 Hive dynamic partitioning .这允许在选择记录时动态确定将每个记录插入到哪个分区的决定。在您的情况下,该决定基于您运行查询的日期。

要使用动态分区,您的分区子句具有分区字段,但没有值。映射到分区字段的值是 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;

关于Hive - 分区列等于当前日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28752560/

相关文章:

date - 有两个不同的字符串代表两个不同的配置单元表中的日期,我想用它们来连接

hadoop - 复杂的 Hive 查询

java - 设置 hive.exec.pre.hooks 时出现 ClassNotFoundException

apache-spark - 我可以将 pyspark 数据框另存为哪些文件格式?

sql - 通过 hiveql 添加组 id

sql - 如何根据公共(public)值合并数据库行?

java - 从Hive读取表格而没有 map 减少

hadoop - 多个插入覆盖到多个表查询在所有临时表中存储相同的结果

hadoop - Hive 中的复杂数据类型问题

sql - Hive SQL - 如何从每个人中删除最大(日期)?