Hive 配置单元-分区列等于当前日期

Hive 配置单元-分区列等于当前日期,hive,hiveql,Hive,Hiveql,我正在尝试从另一个没有“todays date”列的表插入配置单元表。我试图创建的分区是日期级别的。我想做的是这样的: 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

我正在尝试从另一个没有“todays date”列的表插入配置单元表。我试图创建的分区是日期级别的。我想做的是这样的:

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中将分区日期设置为当前系统日期吗

提前感谢,


克雷格

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

要使用动态分区,您的partition子句有partition字段,但没有值。映射到分区字段的值是
选择
末尾的值,顺序相同

当对所有分区字段使用动态分区时,您需要确保对动态分区模式(
hive.exec.dynamic.partition.mode
)使用的是
nonstrict

在您的情况下,您的查询如下所示:

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;

可以使用
current\u date()
以“yyyy-MM-dd”格式获取当前日期,而不是使用
unix\u timestamp()
函数中的

current\u date()
添加到hive 1.2.0中

修订后的查询将是:

SET hive.exec.dynamic.partition.mode=nonstrict;

INSERT OVERWRITE TABLE table_2_partition 
PARTITION (p_date)
SELECT
    *
  , current_date()
FROM table_1;

我希望您正在运行shell脚本,然后可以将当前日期存储在变量中。然后,在配置单元中使用带有分区列的直线创建一个空表。完成后,在将数据插入分区表时,可以将该变量添加为分区列并插入数据

我做了一些类似的事情,并让它发挥作用。谢谢你,杰里米!