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

时间:2018-01-20 03:42:05

标签: hadoop hive hiveql hue

说我有两张桌子

External table - etable

Internal table - itable

我的etable根据日期进行分区。

现在每天从etable的数据填充我的itable我有Hed Query的hue工作流和协调器,如下所示:

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天的数据,我该怎么做?

E.g。

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

有没有办法循环这个查询n次并使用循环变量,因为我可以使用date_sub()在循环的每次迭代中获得不同的日期。还是有更好的方法吗?

谢谢。

1 个答案:

答案 0 :(得分:2)

你应该可以做到

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

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

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

的bash循环

或者,只要可以与Hive通信,您就可以使用Python,Java或您熟悉的任何内容来编写循环。

然后,您可以使用Oozie

安排该脚本/代码