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计划该脚本/代码