如何循环 Hive 查询并使用循环变量

How to loop through Hive Query and use loop variable

假设我有两个表

External table - etable

Internal table - itable

我的餐桌是根据日期分区的。

现在为了每天从 etable 的数据中填充我的 itable,我在 hue 中使用 Hive Query 的工作流和协调器如下所示:

ALTER TABLE etable ADD IF NOT EXISTS PARTITION (date = '${date}') LOCATION 'path/date=${date}';

INSERT OVERWRITE TABLE itable partition(date = '${date}') SELECT * FROM etable WHERE date = '${date}';

现在假设每天我想更新过去 n 天的数据,我该怎么做?

例如

让我们取 n = 2,如果协调器安排在今天 运行 即 2018-01-20(yyyy-MM-dd) 那么它应该更新过去 2 天的数据.所以查询应该更新 2018-01-202018-01-19 的数据。所以基本上我需要运行上面的查询两次不同的日期。

有什么方法可以将此查询循环 n 次并使用循环变量,因为这样我就可以使用 date_sub() 在每次循环迭代中获取不同的日期。或者有什么更好的方法吗?

谢谢。

你应该可以做到`

INSERT OVERWRITE TABLE itable partition(`date`) 
SELECT * FROM etable
WHERE `date` BETWEEN datesub('${date}', ${n}) AND '${date}'

无论如何,Hive 没有循环。 Hue 和 Oozie 也无法做到这一点,因为您正在尝试动态构建查询

您执行此操作的方式需要 bash 循环 beeline -u jdbc:hive2://server:10000 --hivevar date="value" -f script.sql

或者您可以使用 Python、Java 或任何您喜欢的方式编写循环,只要它可以与 Hive 通信即可。

然后,您可以使用 Oozie

安排 script/code