CDC HQL用于历史数据

时间:2018-08-18 02:18:06

标签: hiveql

我正在尝试一次记录一次历史数据的变更数据,并想使用HQL窗口函数来进行。 (我不能使用可能一次处理一行的ETL工具。)

以下是HDFS中的源数据的样子- source_data

ACCT_NUMBER STATUS  TIMESTAMP
100 PENDING 1/1/2010  14:00:00 PM
100 PENDING 1/1/2010  16:00:00 PM
100 PENDING 1/1/2010  18:00:00 PM
100 ASSIGNED    1/1/2010  20:00:00 PM
100 ASSIGNED    1/1/2010  21:00:00 PM
100 ASSIGNED    1/1/2010  22:00:00 PM
100 PENDING 1/3/2010  14:00:00 PM
100 PENDING 1/3/2010  16:00:00 PM
100 PROCESS 1/4/2010  14:00:00 PM
100 CANCEL  1/5/2010  14:00:00 PM
100 PENDING 1/6/2010  14:00:00 PM
100 PENDING 1/6/2010  16:00:00 PM
100 PENDING 1/6/2010  18:00:00 PM
100 ASSIGNED    1/8/2010  13:00:00 PM
100 PROCESS 1/8/2010  14:00:00 PM
100 COMPLETE    1/8/2010  16:00:00 PM

O / P应该是这样的- after CDC

ACCT_NUMBER STATUS  BGN_TIMESTAMP   END_TIMESTAMP
100 PENDING 1/1/2010  14:00:00 PM   1/1/2010  20:00:00 PM
100 ASSIGNED    1/1/2010  20:00:00 PM   1/3/2010  14:00:00 PM
100 PENDING 1/3/2010  14:00:00 PM   1/4/2010  14:00:00 PM
100 PROCESS 1/4/2010  14:00:00 PM   1/5/2010  14:00:00 PM
100 CANCEL  1/5/2010  14:00:00 PM   1/6/2010  14:00:00 PM
100 PENDING 1/6/2010  14:00:00 PM   1/8/2010  13:00:00 PM
100 ASSIGNED    1/8/2010  13:00:00 PM   1/8/2010  14:00:00 PM
100 PROCESS 1/8/2010  14:00:00 PM   1/8/2010  16:00:00 PM
100 COMPLETE    1/8/2010  16:00:00 PM   12/31/9999  23:59:59 PM

棘手的是,STATUS的相同值可以在一段时间内重复出现。例如,上述帐户从"PENDING""ASSIGNED",然后又回到了"PENDING”。 因此,我不能仅按ACCT_NUMBERSTATUS分组并获得TIMESTAMP的MIN和MAX。

任何一种伪代码都会很有帮助。

0 个答案:

没有答案