gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 15:09:41 42 4
gpt4 key购买 nike

假设我有两个表

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 也无法做到这一点,因为您正在尝试动态构建查询

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

>

或者您可以使用 Python、Java 或您熟悉的任何语言编写循环,只要它可以与 Hive 通信即可。

然后,您可以使用 Oozie 安排该脚本/代码

关于hadoop - 如何循环 Hive 查询并使用循环变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48352363/

42 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com