我正在尝试一次记录一次历史数据的变更数据,并想使用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_NUMBER
,STATUS
分组并获得TIMESTAMP的MIN和MAX。
任何一种伪代码都会很有帮助。