sql - 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()))' 作为输出。
有没有其他方法可以在文件名中包含日、月和年?
解决方案
据我所知, set 命令永远不会评估函数,这就是为什么它按原样返回字符串的原因。
有关更多信息,请参见: 如何将查询的输出存储在 HIVE 中的变量中
一种建议是使用 shell 捕获日期,然后将其作为参数传递给您的 sql 脚本。
推荐阅读
- sql - 如何查找上次使用的 SQL Server 数据库?
- redis - Redis设计基于二级索引的数据结构
- c# - 程序运行时如何查找单击事件中调用的方法
- wordpress - 通过自定义查询排除特色帖子不起作用
- lua - 如何通过 Lua Rocks 安装 lua 模块/库?
- c - 你能告诉我在使用 C 的哈希表的二次探测实现中这个 SEARCH 函数有什么问题吗?
- python - 如何将 ITEM 与数据库中的记录匹配?
- list - Prolog中列表中连续相似元素的子列表
- java - 我们可以通过更改 Java 中的返回类型(协变返回类型)来覆盖方法。为什么?
- python - loc 获取没有 .index[0] 的索引