在Hive上实现SCD

在Hive上实现SCD

ID:42594366

大小:78.50 KB

页数:8页

时间:2019-09-18

在Hive上实现SCD_第1页
在Hive上实现SCD_第2页
在Hive上实现SCD_第3页
在Hive上实现SCD_第4页
在Hive上实现SCD_第5页
资源描述:

《在Hive上实现SCD》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、在Hive上实现SCD一、问题提出官方一直称Hive是Hadoop数据仓库解决方案。既然是数据仓库就离不开多维、CDC、SCD这些概念,于是尝试了一把在Hive上实现SCD1和SCD2。这有两个关键点,一个是行级更新,一个是生成代理键。行级更新hive本身就是支持的,但需要一些配置,还有一些限制。生成代理键在RDBMS上一般都用自增序列。Hive也有一些对自增序列的支持,本实验分别使用了窗口函数ROW_NUMBER()和hive自带的UDFRowSequence实现生成代理键。二、软件版本Hadoop2.7.2Hive2.0.0三、实验步骤1.准备初始数据文件a.txt,内容如

2、下:[plain]viewplaincopy在CODE上查看代码片派生到我的代码片1,张三,US,CA2,李四,US,CB3,王五,CA,BB4,赵六,CA,BC5,老刘,AA,AA2.用ROW_NUMBER()方法实现初始装载和定期装载(1)建立初始装载脚本init_row_number.sql,内容如下:[sql]viewplaincopy在CODE上查看代码片派生到我的代码片USEtest;--建立过渡表DROPTABLEIFEXISTStbl_stg;CREATETABLEtbl_stg(idINT,nameSTRING,ctySTRING,stSTRING)ROWFO

3、RMATDELIMITEDFIELDSTERMINATEDBY',';--建立维度表DROPTABLEIFEXISTStbl_dim;CREATETABLEtbl_dim(skINT,idINT,nameSTRING,ctySTRING,stSTRING,versionINT,effective_dateDATE,expiry_dateDATE)CLUSTEREDBY(id)INTO8BUCKETSSTOREDASORCTBLPROPERTIES('transactional'='true');--向过渡表加载初始数据LOADDATALOCALINPATH'/home/grid

4、/BigDataDWTest/a.txt'INTOTABLEtbl_stg;--向维度表装载初始数据INSERTINTOtbl_dimSELECTROW_NUMBER()OVER(ORDERBYtbl_stg.id)+t2.sk_max,tbl_stg.*,1,CAST('1900-01-01'ASDATE),CAST('2200-01-01'ASDATE)fromtbl_stgCROSSJOIN(SELECTCOALESCE(MAX(sk),0)sk_maxFROMtbl_dim)t2;(2)执行初始装载[plain]viewplaincopy在CODE上查看代码片派生到我的

5、代码片hive-S-f/home/grid/BigDataDWTest/init_row_number.sql(3)修改数据文件a.txt,内容如下:[plain]viewplaincopy在CODE上查看代码片派生到我的代码片1,张,U,C3,王五,CA,BB4,赵六,AC,CB5,刘,AA,AA6,老杨,DD,DD说明:1.新增了第6条数据2.删除了第2条数据3.修改了第1条数据的name列、cty列和st列(name列按SCD2处理,cty列和st列按SCD1处理)4.修改了第4条数据的cty列和st列(按SCD1处理)5.修改了第5条数据的name列(按SCD2处理)(

6、4)建立定期装载脚本scd_row_number.sql,内容如下:[sql]viewplaincopy在CODE上查看代码片派生到我的代码片USEtest;--设置日期变量SEThivevar:pre_date=DATE_ADD(CURRENT_DATE(),-1);SEThivevar:max_date=CAST('2200-01-01'ASDATE);--向过渡表加载更新后的数据LOADDATALOCALINPATH'/home/grid/BigDataDWTest/a.txt'OVERWRITEINTOTABLEtbl_stg;--向维度表装载更新后的数据--设置已删除

7、记录和SCD2的过期UPDATEtbl_dimSETexpiry_date=${hivevar:pre_date}WHEREskIN(SELECTa.skFROM(SELECTsk,id,nameFROMtbl_dimWHEREexpiry_date=${hivevar:max_date})aLEFTJOINtbl_stgbONa.id=b.idWHEREb.idISNULLORa.name<>b.name);--处理SCD2新增行INSERTINTOtbl_dimSELECTROW_NUM

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。