【发布时间】:2019-12-18 00:29:00
【问题描述】:
我每周都会运行一个特定的查询,它会创建一个包含所需数据的每周表。
表名的格式如下所述
- 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
【问题讨论】:
-
我的理解是,您希望该特定作业将在每个星期一运行,并使当前日期超出当前日期。例如选择 weekofyear('2019-08-05') 的 32;然后您需要将 32 传递给您的 create table 语句。对吗?
-
绝对正确。一个小的变化是我想要前一周而不是当前周的表名
标签: sql hadoop hive create-table hue