数仓-拉链表实现

8 篇文章 0 订阅
订阅专栏

1、拉链表使用场景(解决数据同步问题)

(1)变化的比例和频率不是很大
  • 总共有1000万的用户,每天新增和发生变化的有10万左右
(2)需要查看某一个时间点或者时间段的历史快照信息
  • 查看某一个用户在历史某一时间点的手机号码
  • 查看某一个用户在过去某一段时间内,更新过几次等等
(3)变化的比例和频率不是很大
  • 总共有1000万的用户,每天新增和发生变化的有10万左右

2、拉链表实现图解

(1)更新数据

在这里插入图片描述

(2)最终数据
  上图更新表
  union all 
  ods层第二天新增用户表数据

===>完整表数据

在这里插入图片描述

3、拉链表实现过程

(1)测试数据准备
!!备注:两个文件的数据需要上传到 虚拟机或者hdfs

zipper.txt 文件

001	186xxxx1234	laoda	0	sh	2021-01-01	9999-12-31
002	186xxxx1235	laoer	1	bj	2021-01-01	9999-12-31
003	186xxxx1236	laosan	0	sz	2021-01-01	9999-12-31
004	186xxxx1237	laosi	1	gz	2021-01-01	9999-12-31
005	186xxxx1238	laowu	0	sh	2021-01-01	9999-12-31
006	186xxxx1239	laoliu	1	bj	2021-01-01	9999-12-31
007	186xxxx1240	laoqi	0	sz	2021-01-01	9999-12-31
008	186xxxx1241	laoba	1	gz	2021-01-01	9999-12-31
009	186xxxx1242	laojiu	0	sh	2021-01-01	9999-12-31
010	186xxxx1243	laoshi	1	bj	2021-01-01	9999-12-31


update.txt 文件


008	186xxxx1241	laoba	1	sh	2021-01-02	9999-12-31
011	186xxxx1244	laoshi	1	jx	2021-01-02	9999-12-31
012	186xxxx1245	laoshi	0	zj	2021-01-02	9999-12-31
(2)创建表和导入数据
--把zipper.txt 、update.txt两个文件放到虚拟机的/root/hivedata目录

--Step1:创建dwd层的 拉链表
--模拟导入第一天全量数据
create table dw_zipper(
                          userid string,
                          phone string,
                          nick string,
                          gender int,
                          addr string,
                          starttime string,
                          endtime string
) row format delimited fields terminated by '\t';

--加载模拟数据
load data local inpath '/root/hivedata/zipper.txt' into table dw_zipper;
--使用put也可以
hadoop fs -put zipper.txt /user/hive/warehouse/test.db/dw_zipper

select userid,nick,addr,starttime,endtime from dw_zipper;

在这里插入图片描述

--Step2:模拟导入第二天 增量数据采集

create table ods_zipper_update(
                                  userid string,
                                  phone string,
                                  nick string,
                                  gender int,
                                  addr string,
                                  starttime string,
                                  endtime string
) row format delimited fields terminated by '\t';

load data local inpath '/root/hivedata/update.txt' into table ods_zipper_update;
--使用put也可以
hadoop fs -put update.txt /user/hive/warehouse/test.db/ods_zipper_update

select * from ods_zipper_update;

在这里插入图片描述

--Step3:创建临时表
create table tmp_zipper(
                           userid string,
                           phone string,
                           nick string,
                           gender int,
                           addr string,
                           starttime string,
                           endtime string
) row format delimited fields terminated by '\t';


--Step4:合并拉链表与增量表
insert overwrite table tmp_zipper
select
    userid,
    phone,
    nick,
    gender,
    addr,
    starttime,
    endtime
from ods_zipper_update
union all
--查询原来拉链表的所有数据,并将这次需要更新的数据的endTime更改为更新值的startTime
select
    a.userid,
    a.phone,
    a.nick,
    a.gender,
    a.addr,
    a.starttime,
    --如果这条数据没有更新或者这条数据不是要更改的数据,就保留原来的值,否则就改为新数据的开始时间-1
    if(b.userid is null or a.endtime < '9999-12-31', a.endtime , date_sub(b.starttime,1)) as endtime
from dw_zipper a  left join ods_zipper_update b
                            on a.userid = b.userid ;


--Step5:覆盖拉链表
insert overwrite table dw_zipper
select * from tmp_zipper;

参考:https://blog.csdn.net/wangxueying5172/article/details/122506458

数仓设计】(一):数仓拉链的使用和设计
清平乐的技术专栏
04-18 1282
全文由下面几个部分组成: 第一部分:先分享一下什么是拉链,以及拉链的应用场景; 第二部分:通过两个使用案例来对拉链做近一步的阐释 第三部分:举一个具体的应用场景,来设计并实现一份拉链,最后并通过一些例子说明如何使用我们设计的这张 (因为现在Hive的大规模使用,我们会以Hive场景下的设计为例)。 最后:分析一下拉链的优缺点,并进行补充说明,比如说拉链和流水的区别。 一、拉链的定...
数仓拉链
qq_43519651的博客
12-10 2199
拉链 一丶什么是拉链 拉链是一种数据模型,主要是针对数据仓库设计中存储数据的方式而定义的,顾名思义,所谓拉链,就是记录历史。记录一个事物从开始,一直到当前状态的所有变化的信息。拉链可以避免按每一天存储所有记录造成的海量存储问题,同时也是处理缓慢变化数据的一种常见方式。 百度百科的解释:拉链是维护历史状态,以及最新状态数据的一种拉链根据拉链粒度的不同,实际上相当于快照,只不过做了优化,去除了一部分不变的记录,通过拉链可以很方便的还原出拉链时点的客户记录。 二丶拉链的产生背景 在数据仓库的
数仓拉链
每天更新大数据面经和技术
04-19 976
  拉链是大数据开发面试重点,今天专门写一篇文章进行讨论。 1.什么是拉链 用于记录每条信息的生命周期,有开始日期和结束日期字段。至今有效的用极大值示。 | uid | name | phone_number | start_date| end_date | | ---- | ---- | ------------ | ---------- | ---------- | | 1 | 张三 | 188****7777 | 2020-01-01 | 2020-02-10 | | 1 |
数仓拉链(压缩存储)
hzp666的博客
02-14 1072
一、拉链介绍 1.什么是拉链 拉链:记录每条信息的生命周期,一旦一条记录的生命周期结束,就重新开始一条新的记录,并把当前日期放入生效开始日期。 如果当前信息至今有效,在生效结束日期中填入一个极大值(如9999-99-99),如下1): image.png 2.为什么要做拉链 拉链适合于:数据会发生变化,但是大部分是不变的。 比如:订单信息从未支付、已支付、未发货、已完成等状态经历了一周,大部分时间是不变化的。如果数据量有一定规模,无法按照每日全量的方式保存。比如:1亿用户*
数据仓库之拉链
weixin_41998764的博客
07-19 2477
拉链一、数据仓库二、拉链原理三、拉链实现步骤1、准备数据:2、数据加载过程:3、刷新customer_inc数据到customer(2017-01-02):4、刷新customer_inc数据到customer(2017-01-03)5、查询拉链: 今天看到了一篇讲解数仓建设之拉链的好文。看过之后,感觉甚好。讲解的很是详细。在这里贴出来一方面是给自己留个记录,可以之后翻出来看看;另外一方面就是分享给大家。 大家也可以直接点击下面地址跳转到原文链接下阅读: 原文链接 https://www
数仓-词根-简版V4.0
04-08
数仓-词根-简版V4.0
千亿级实时数仓-讲义.rar
04-06
千亿级实时数仓
大数据项目之电商数仓-代码
08-31
大数据项目之电商数仓-代码 大数据项目之电商数仓-代码 大数据项目之电商数仓-代码 大数据项目之电商数仓-代码 大数据项目之电商数仓-代码 大数据项目之电商数仓-代码 大数据项目之电商数仓-代码
01.【实时数仓-day01】课程目标.mp4
03-01
内含从同步数据,实时的处理数据到可视化展现数据的操作 需要的软件也都准备好了 适合人群:学过离线数仓,会使用Flink,会Java
藏经阁-阿里云云原生一体化数仓-31.pdf
最新发布
01-10
藏经阁-阿里云云原生一体化数仓-31
数据仓库拉链
02-14
-- 拉链介绍 在数据分析中有时会需要维护一些历史状态,比如订单状态变化,评分变化,为了保存下来这些状态变化的路径,可以同过拉链实现 -- 使用场景 1、数据量比计较大,但业务要求每次需要查询全量历史,每天存储一份全量数据太占用存储空间 2、记录变更不大,比如只有装填和更新时间有变动,其他字段都不变
数仓工具—Hive实战之拉链(3)
热门推荐
06-20 4万+
拉链初识 需要查看历史某一时间节点的状态,同时考虑到存储空间;或则适用于数据会发生变化,但是大部分是不变的 在数据仓库的数据模型设计过程中,经常会遇到下面这种的设计: 有一些的数据量很大,比如一张用户,大约10亿条记录,50个字段,这种,即使使用ORC压缩,单张的存储也会超过100G,在HDFS使用双备份或者三备份的话就更大一些。 中的部分字段会被update更新操作,如用户联系方式,产品的描述信息,订单的状态等等。 需要查看某一个时间点或者时间段的历史快照信息,比如,查看某一个订单在历史
数仓拉链-从需求到实现
acethan的博客
03-11 236
拉链 某天领导提了个需求,需要按某段时间,比如按天为单位,来记录订单的状态,需要从时间上能对状态进行跟踪,比如2020-01-01 下单的某一订单,2020-01-02 客户支付,2020-01-03 ~ 2020-01-05之间这笔单在运输途中,2020-01-06用户退单了这么一过程,这咋弄呢? 面对问题,真男人不能怂,有了问题就解决问题吧。先来看看我们手里有什么数据呢?从业务开发兄弟那边得到订单数据放在DB里,每条订单只有一条订单记录和若干条状态流水。ok,这下有了数据就该我们动脑子想想怎么办了。
离线数仓拉链
文报的博客
09-20 306
1、创建加载数据(准备工作) -- 用户信息 DROP TABLE IF EXISTS test.userinfo; CREATE TABLE test.userinfo( userid STRING COMMENT '用户编号', mobile STRING COMMENT '手机号码', regdate STRING COMMENT '注册日期') COMMENT '用户信息' PARTITIONED BY (dt string) row format delimite
数据仓库开发之拉链
qq_40905284的博客
03-10 633
数据仓库开发之拉链
数据仓库_拉链_拉链实现思路
迎难而上
03-13 4243
本篇文章,主要讲解 1.什么是拉链 以及 拉链示例 2.不同原始情况下,拉链如何构建 。。。 。。。
漫谈数据仓库之拉链(原理、设计以及在Hive中的实现
大数据星球-浪尖
08-02 248
正 文0x00 前言本文将会谈一谈在数据仓库中拉链相关的内容,包括它的原理、设计、以及在我们大数据场景下的实现方式。全文由下面几个部分组成:先分享一下拉链的用途、什么是拉链。通过一些小的使用场景来对拉链做近一步的阐释,以及拉链和常用的切片的区别。举一个具体的应用场景,来设计并实现一份拉链,最后并通过一些例子说明如何使用我们设计的这张(因为现在Hive的大规模使用,我们会以Hive...
数据仓库之拉链实现
huobumingbai1234的博客
07-22 1960
拉链在实际工作中还是有使用的必要,能够大量的节省存储空间,我这次主要使用在商户信息构建,商户姓名存在改名字的可能性,但是商户id不变,下面是一个商户信息拉链的例子。 主要构建思路:1、首先,找到记录最早一天的商户信息作为初始状态,写入到最后使用的中 2、然后把改名字的商户的结束日期修改下 + 每日新增的商户信息 + 改名字之后新的商户...
HIVE数据仓库——拉链
qq_61645895的博客
06-21 914
拉链记录一个事物从开始,一直到当前状态的所有变化的信息。可以使用这张拿到最新的当天的最新数据以及之前的历史数据。
离线数仓拉链如何创建
06-11
离线数仓中的拉链是一种常见的数据处理技术,用于处理维度数据的历史变化。创建拉链的步骤如下: 1. 确定拉链的维度:确定需要跟踪历史变化的维度,例如客户、产品、时间等。 2. 创建拉链结构:根据需要跟踪的维度,创建拉链结构。拉链通常包含以下字段:维度字段、开始时间、结束时间、历史版本号。 3. 导入数据:将需要跟踪历史变化的维度数据导入到拉链中。对于新纪录,需要插入一条新的记录;对于已有记录的变化,需要更新原有记录的结束时间和历史版本号,并插入一条新的记录。 4. 查询数据:根据需要查询的时间范围和版本号,从拉链中查询对应的记录。 需要注意的是,拉链的创建和维护需要一定的技术和经验,对于大规模的离线数仓,通常需要借助专业的数据处理工具和技术。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
写文章

热门文章

  • Hive 求7天、4周、6个月的数据(1.日期) 7279
  • Kettle 连接mysql数据库失败,驱动都有,就是连不上mysql数据库 5684
  • Windows ping不通虚拟机的解决方案 2396
  • idea常用快捷键 1943
  • Spark SQL将计算指标的特定的列转换为Json,其他列不变 1818

分类专栏

  • OLAP 2篇
  • Doris
  • Flink 2篇
  • linux 2篇
  • Hbase 1篇
  • hive 8篇
  • hadoop 5篇
  • sql 4篇
  • SQL面试 3篇
  • Java 1篇
  • kafka 2篇
  • github 1篇
  • mysql 1篇
  • idea 1篇
  • SQL实战 4篇
  • kettle 1篇
  • spark 1篇

最新评论

  • FlinkSQL 中lateral table

    普通网友: 大佬的文章写的太精辟了 让我深刻了解了这篇文章的精髓 谢谢大佬分享,希望继续创作优质博文。【我也写了一些相关领域的文章,希望能够得到博主的指导,共同进步!】

  • FlinkSQL 中lateral table

    2401_84166236: 优质好文,博主的文章细节很到位,兼顾实用性和可操作性,期待博主持续带来更多好文【我也写了一些相关领域的文章,希望能够得到博主的指导,共同进步!】

  • Flink窗口机制

    普通网友: 文章结构严谨有条,层次分明,读起来一点也不费劲,让人受益匪浅。【我也写了一些相关领域的文章,希望能够得到博主的指导,共同进步!】

  • CentOS7.6(linux)安装mysql5.7

    m0_53348554: 终于建好了,谢谢博主表情包

  • Kettle 连接mysql数据库失败,驱动都有,就是连不上mysql数据库

    Greatest Chili: 这个useSSL真的是害死人,搞了半天终于弄好,感谢博主,跪谢表情包

您愿意向朋友推荐“博客详情页”吗?

  • 强烈不推荐
  • 不推荐
  • 一般般
  • 推荐
  • 强烈推荐
提交

最新文章

  • 投简历石沉大海?BOSS直聘怎么筛选掉僵尸岗位!!!!
  • FlinkSQL 中lateral table
  • Doris模型总结
2024年9篇
2023年6篇
2022年24篇
2021年2篇

目录

目录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

别这么骄傲

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或 充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值

深圳SEO优化公司汕头网站设计哪家好岳阳网页制作推荐果洛网站搜索优化哪家好遵义网络推广公司宝安高端网站设计哪家好迁安网站设计多少钱西安优化价格德州模板制作哪家好济南建网站报价宜宾网站改版报价广安英文网站建设推荐百色百度爱采购报价益阳网站推广工具公司衡水SEO按天收费报价汉中网站设计多少钱天津网站开发多少钱焦作百度seo公司衡阳高端网站设计报价上饶网站定制哪家好吉林阿里店铺托管报价晋城百度网站优化排名杭州SEO按效果付费吉林网站推广系统价格岳阳至尊标王哪家好保山阿里店铺托管桂林推广网站温州模板推广资阳网站定制报价沧州阿里店铺托管报价景德镇优化报价歼20紧急升空逼退外机英媒称团队夜以继日筹划王妃复出草木蔓发 春山在望成都发生巨响 当地回应60岁老人炒菠菜未焯水致肾病恶化男子涉嫌走私被判11年却一天牢没坐劳斯莱斯右转逼停直行车网传落水者说“没让你救”系谣言广东通报13岁男孩性侵女童不予立案贵州小伙回应在美国卖三蹦子火了淀粉肠小王子日销售额涨超10倍有个姐真把千机伞做出来了近3万元金手镯仅含足金十克呼北高速交通事故已致14人死亡杨洋拄拐现身医院国产伟哥去年销售近13亿男子给前妻转账 现任妻子起诉要回新基金只募集到26元还是员工自购男孩疑遭霸凌 家长讨说法被踢出群充个话费竟沦为间接洗钱工具新的一天从800个哈欠开始单亲妈妈陷入热恋 14岁儿子报警#春分立蛋大挑战#中国投资客涌入日本东京买房两大学生合买彩票中奖一人不认账新加坡主帅:唯一目标击败中国队月嫂回应掌掴婴儿是在赶虫子19岁小伙救下5人后溺亡 多方发声清明节放假3天调休1天张家界的山上“长”满了韩国人?开封王婆为何火了主播靠辱骂母亲走红被批捕封号代拍被何赛飞拿着魔杖追着打阿根廷将发行1万与2万面值的纸币库克现身上海为江西彩礼“减负”的“试婚人”因自嘲式简历走红的教授更新简介殡仪馆花卉高于市场价3倍还重复用网友称在豆瓣酱里吃出老鼠头315晚会后胖东来又人满为患了网友建议重庆地铁不准乘客携带菜筐特朗普谈“凯特王妃P图照”罗斯否认插足凯特王妃婚姻青海通报栏杆断裂小学生跌落住进ICU恒大被罚41.75亿到底怎么缴湖南一县政协主席疑涉刑案被控制茶百道就改标签日期致歉王树国3次鞠躬告别西交大师生张立群任西安交通大学校长杨倩无缘巴黎奥运

深圳SEO优化公司 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化