如何循环 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-20
和 2018-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
假设我有两个表
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-20
和 2018-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