sql - 从 current_date 获取星期并在 SQL 中创建一个具有动态名称的表

标签 sql hadoop hive create-table hue

我每周运行一个特定的查询,创建一个包含所需数据的周表。

表名格式如下

  1. db_name.subscriptions_wk29 -- 为第 29 周数据创建的表
  2. db_name.subscriptions_wk30 -- 为第 30 周数据创建的表
  3. 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/

相关文章:

sql - 如何使用变量 where 子句创建 SQL View

sql - 是什么使这些查询之一更快?

mysql - mysql连接多个表的问题

sql - 从日期范围生成天数

hadoop - "Doesn' t 存在于 RM"Pig 后端错误

hadoop - 奇数”映射100%减少Hadoop Java作业中的0%@输出

hadoop - 宏:编辑记录的MobaXterm宏

hadoop - 如何将新记录更新到临时表中的主表

csv - 将Hive查询导出为CSV

sql-server - 从SQL Server进行Sqoop导入,将binary(10)转换为bigint