首页 > 解决方案 > Hive:将当前年/月/日设置为变量并用于定义文件名

问题描述

我正在尝试将文件写入 s3,其名称应包含当前年份和月份。为此,我想定义变量以获取年、月和日

set year=year(from_unixtime(unix_timestamp()));
set month=month(from_unixtime(unix_timestamp()));
set day=day(from_unixtime(unix_timestamp()));

CREATE EXTERNAL TABLE abc (col1 int, col2 varchar(100), col3 INT)
ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' STORED AS TEXTFILE LOCATION "s3://location_${hiveconf:year}${hiveconf:month}${hiveconf:day}/"
TBLPROPERTIES ("skip.header.line.count"="1");

如果我运行脚本 - 'select "${hiveconf:year}";' 我得到 'year(from_unixtime(unix_timestamp()))' 作为输出。

有没有其他方法可以在文件名中包含日、月和年?

标签: sqlhive

解决方案


据我所知, set 命令永远不会评估函数,这就是为什么它按原样返回字符串的原因。

有关更多信息,请参见: 如何将查询的输出存储在 HIVE 中的变量中

一种建议是使用 shell 捕获日期,然后将其作为参数传递给您的 sql 脚本。


推荐阅读