Hadoop 如何循环配置单元查询和使用循环变量
假设我有两张桌子Hadoop 如何循环配置单元查询和使用循环变量,hadoop,hive,hiveql,hue,Hadoop,Hive,Hiveql,Hue,假设我有两张桌子 External table - etable Internal table - itable 我的表是根据日期划分的 现在,为了每天从etable的数据填充我的itable,我在hue中使用配置单元查询设置了工作流和协调器,如下所示: ALTER TABLE etable ADD IF NOT EXISTS PARTITION (date = '${date}') LOCATION 'path/date=${date}'; INSERT OVERWRITE TABLE
External table - etable
Internal table - itable
我的表是根据日期划分的
现在,为了每天从etable的数据填充我的itable,我在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
天的数据,我该怎么做
例如
让我们看一下n=2
,如果协调员计划今天运行,即2018-01-20
(yyyy-MM-dd),那么它应该更新过去2
天的数据。因此,查询应更新2018-01-20
和2018-01-19
的数据。所以基本上我需要用不同的日期运行上面的查询两次
有没有办法循环这个查询n
次并使用循环变量,因为这样我就可以使用date\u sub()
在循环的每次迭代中获得不同的日期。还是有更好的办法
谢谢。你应该能做到`
INSERT OVERWRITE TABLE itable partition(`date`)
SELECT * FROM etable
WHERE `date` BETWEEN datesub('${date}', ${n}) AND '${date}'
不管怎样,蜂巢没有环。Hue和Oozie也无法做到这一点,因为您正在尝试动态构建查询 这样做需要一个bash循环,其中包含
beeline-ujdbc:hive2://server:10000--hivevar date=“value”-f script.sql
或者,您可以使用Python、Java或任何您熟悉的工具来编写循环,只要它可以与Hive通信
然后,您可以使用Oozie计划该脚本/代码