sql - 从 current_date 获取星期并在 SQL 中创建具有动态名称的表
问题描述
我每周运行一个特定的查询,创建所需数据的每周表。
表名的格式如下所述
- db_name.subscriptions_wk29 -- 为第 29 周数据创建的表
- db_name.subscriptions_wk30 -- 为第 30 周数据创建的表
- db_name.subscriptions_wk31 -- 为第 31 周数据创建的表
由于这是一项重复性任务,我想安排此查询,以便它在特定一周的每个星期一自动运行以获取前一周的数据。
我面临的问题是,我不知道如何在每周运行查询时动态更改表名。
因此,当我下次运行查询时,它应该会自动创建一个名为 name 的表db_name.subscriptions_wk32
。我可以从中获取值 32,weekofyear('2019-08-05')
但不知道如何将其放入表名中
目前我写如下
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 SELECT * FROM ..........
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 ...
"
或者您可以-hivevar
在配置单元命令行中使用参数来调用脚本文件(-f
选项),假设weeknumber
已经像以前一样计算:
hive -hivevar weeknumber="$weeknumber" -f script_file_name
推荐阅读
- vbscript - 使用 vbscript 创建包含原始变量的新 vbscript 时遇到问题
- spark-structured-streaming - Spark Structured Streaming exception handling
- html - 可以在手机上访问 WAMP 但布局被破坏
- javascript - 如果有内部表,则使用纯 JavaScript 过滤或搜索
- hadoop - 无法找到创建的 Hive 表,也无法从表中检索数据
- numpy - dtype的反向查找
- laravel - 为什么 Eloquent 在 save() 上转储一个数组?
- java - 存储数组列表,电话簿演示程序(需要多两行)?
- typescript - 为什么在打字稿中覆盖抽象方法参数类型是任何?
- javascript - 关于 d3.interpolateObject 的困惑