我每周运行一个特定的查询,创建一个包含所需数据的周表。
表名格式如下
- db_name.subscriptions_wk29 -- 为第 29 周数据创建的表
- db_name.subscriptions_wk30 -- 为第 30 周数据创建的表
- db_name.subscriptions_wk31 -- 为第 31 周数据创建的表
由于这是一项重复性任务,我想安排此查询,使其在特定一周的每个星期一自动运行以获取前一周的数据。
我面临的问题是,我不知道如何在每周运行查询时动态更改表名。
因此,当我下次运行查询时,它应该会自动创建一个名为 db_name.subscriptions_wk32
的表。我可以从 weekofyear('2019-08-05')
中获取值 32,但不知道如何将其放入表名中
目前我是这样写的
CREATE TABLE db_name.subscriptions_wk30 AS -- a hardcoded name
SELECT *
FROM ..........
我想要的是
CREATE TABLE db_name.subscriptions_wkCAST(weekofyear('2019-08-05') AS varchar) -- a dynamic name
SELECT *
FROM ..........
这将导致
创建表 db_name.subscriptions_wk32 选择 * 来自............
PS 我使用 Hive/Hue 作为 RDBMS
最佳答案
无法在查询本身中计算表名,但可以将参数传递给脚本。 您可以在 shell 中计算参数并从 shell 执行脚本:
#You can provide date:
varDate=2019-08-05
#And calculate weekyear
weeknumber=$(date --date=${varDate} +%V)
echo "${weeknumber}"
#returns 32
#Or calculate current date weekyear
weeknumber=`date +%V`
#Or calculate previous week date
weeknumber="$(date -d "7 days ago" +"%V")"
#And call hive script like this:
hive -e "CREATE TABLE db_name.subscriptions_wk${weeknumber} -- parametrized name suffix
SELECT *
FROM ...
"
或者可以在hive命令行中使用-hivevar
参数调用脚本文件(-f
选项),假设weeknumber
已经像以前一样计算:
hive -hivevar weeknumber="$weeknumber" -f script_file_name
关于sql - 从 current_date 获取星期并在 SQL 中创建一个具有动态名称的表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57444026/