使用HIVE更改数据捕获

时间:2014-10-22 07:00:47

标签: hive cdc

我试图使用配置单元更改数据捕获。我们已经在DataStage中有一个现有的CDC,但我们现在正试图在HIVE中实施。  这是我所做的,如果我做错了,请纠正我。 (但是我得到了正确的结果......)。

以下是源数据: 表名:month1     e_id,e_name,e_ad     11,约翰,新加坡     22,杰克,墨尔本     33,杰西,悉尼     44,lampard,加拿大     55,pomer,珀斯

第二个表:month2 它与month1具有相同的列。 e_id,e_name,e_add 11,约翰,奥丽莎 22,杰克,墨尔本 44,lampard,加拿大 55,pomer,珀斯 66,拉胡尔,孟买

所以这里的关键字段是e_id,值字段是e_name和e_add

select 
case when cdc_codes ='Updates' Then month2s
case when cdc_codes = 'NoChange' then month1s
case when cdc_codes = 'New' then month2s
case when cdc_codes = 'Deletes' then month1s
else 'Error' end as fin_cols
from (select case when m1.e_id = m2.e_id and concat(m1.e_name,m1.e_add) = concat(m2.e_name,m2.e_add)     then  'NoChange'
when m1.e_id = m2.e_id and  concat(m1.e_name,m1.e_add) <> concat(m2.e_name,m2.e_add) then  'Update'
when m1.e_id is null then 'New'
when m2.e_id is null then 'Deletes'
else 'Error' end as cdc_codes,
concat(m1.e_id,',',m1.e_name,',',m1.e_add) as month1s,
concat(m2.e_id,',',m2.e_name,',',m2.e_add) as month2s
from month1 as m1 full outer join month2 as m2
on m1.e_id = m2.e_id) as b1

这个SQL工作正常,我得到了我预期的结果。请原谅我糟糕的列命名约定。一旦我得到关于解决方案的确认,我将重新编写此SQL并发布最终的干净版本。

0 个答案:

没有答案