数据仓库(10)数仓拉链表开发实例

简介: 数仓拉链表开发实例
+关注继续查看

拉链表是数据仓库中特别重要的一种方式,它可以保留数据历史变化的过程,这里分享一下拉链表具体的开发过程。

维护历史状态,以及最新状态数据的一种表,拉链表根据拉链粒度的不同,实际上相当于快照,只不过做了优化,去除了一部分不变的记录,通过拉链表可以很方便的还原出拉链时点的客户记录。

这里用商品价格的变化作为例子,具体的开发过程要按实际的来,不能照搬代码,编程重要的是了解背后的思路和原理,而不是ctrl+c和ctrl+v。那对我们学习提升的帮助有限,虽然可能对完成工作的效率帮助很大。

在开始介绍之前,这里的数据仓库的环境是HIVE。

首先看看原始的数据:
图片.png

可以看到,原始的数据是每一个商品,一条记录,每一个商品,只保留最新的价格信息。这里的拉链表,我们做到天粒度的。

我们这里的思路是这样的,将最新的商品记录插入历史拉链表中,然后我们通过HIVE的窗口行数,按照end_date排序,然后分别取下一条的sale_price和end_date,然后再判断本条的价格和下一条的价格是否相等,如果是一样的,那么就把end_date改为下一条的end_date,最后做去重处理,然后就得到我们想要的数据了。

说了这么多,我觉得还是把sql贴出来会好一些,代码是最好的语言。

talk is cheap,show me the code。

-- 商品原始表这里取名goods_tableselect spu_id,       min(start_date) as start_date,       end_date as end_date,       sale_pricefrom  (select spu_id,          start_date,          if(sale_price = lead_sale_price,lead_end_date,end_date) as end_date,          sale_price   from     ( select spu_id,              start_date,              end_date,              sale_price,              lead(sale_price,1,null) over(partition by spu_id order by end_date) as lead_sale_price,              lead(end_date) over(partition by spu_id order by end_date) as lead_end_date      from goods_table ) t) tgroup by spu_id,         end_date,         sale_price ;

根据上面的代码,跑出来的,就是我们想要的拉链表的数据了,看看最后的效果。
图片.png

使用这种方式即可以记录历史,可以最大程度的节省存储,不会产生过多的冗余。

相关实践学习
数据库实验室挑战任务-初级任务
本场景介绍如何开通属于你的免费云数据库,在RDS-MySQL中完成对学生成绩的详情查询,执行指定类型SQL。
阿里云云原生数据仓库AnalyticDB MySQL版 使用教程
云原生数据仓库AnalyticDB MySQL版是一种支持高并发低延时查询的新一代云原生数据仓库,高度兼容MySQL协议以及SQL:92、SQL:99、SQL:2003标准,可以对海量数据进行即时的多维分析透视和业务探索,快速构建企业云上数据仓库。 了解产品 https://www.aliyun.com/product/ApsaraDB/ads
相关文章
|
10天前
|
Cloud Native OLAP 关系型数据库
云原生数据仓库AnalyticDB MySQL版/PostgreSQL版(二)
云原生数据仓库AnalyticDB MySQL版/PostgreSQL版(二)
43 0
|
10天前
|
存储 Cloud Native 关系型数据库
云原生数据仓库AnalyticDB MySQL版/PostgreSQL版(一)
云原生数据仓库AnalyticDB MySQL版/PostgreSQL版(一)
28 0
|
17天前
|
数据采集 敏捷开发 存储
数据仓库(5)数仓Kimball与Inmon架构的对比
数据仓库主要有四种架构,Kimball的DW/BI架构、独立数据集市架构、辐射状企业信息工厂Inmon架构、混合Inmon与Kimball架构。不过不管是那种架构,基本上都会使用到维度建模。
41 0
数据仓库(5)数仓Kimball与Inmon架构的对比
|
1月前
|
消息中间件 数据采集 JSON
1、电商数仓(用户行为采集平台)数据仓库概念、用户行为日志、业务数据、模拟数据、用户行为数据采集模块、日志采集Flume(二)
1、电商数仓(用户行为采集平台)数据仓库概念、用户行为日志、业务数据、模拟数据、用户行为数据采集模块、日志采集Flume(二)
|
1月前
|
消息中间件 数据采集 SQL
1、电商数仓(用户行为采集平台)数据仓库概念、用户行为日志、业务数据、模拟数据、用户行为数据采集模块、日志采集Flume(一)
1、电商数仓(用户行为采集平台)数据仓库概念、用户行为日志、业务数据、模拟数据、用户行为数据采集模块、日志采集Flume(一)
|
2月前
|
存储 数据挖掘 BI
数据仓库(4)基于维度建模的数仓KimBall架构
基于维度建模的KimBall架构,将数据仓库划分为4个不同的部分。分别是操作型源系统、ETL系统、数据展现和商业智能应用,如下图。
112 1
|
3月前
|
大数据 数据管理 数据库
数据仓库(3)数仓建模之星型模型与维度建模
维度建模是一种将数据结构化的逻辑设计方法,也是一种广泛应用的数仓建模方式,它将客观世界划分为度量和上下文。度量是常常是以数值形式出现,事实周围有上下文包围着,这种上下文被直观地分成独立的逻辑块,称之为维度。它与实体-关系建模有很大的区别,实体-关系建模是面向应用,遵循第三范式,以消除数据冗余为目标的设计技术。维度建模是面向分析,为了提高查询性能可以增加数据冗余,反规范化的设计技术。
296 1
|
3月前
|
存储 大数据 项目管理
带你读《升舱 - 数据仓库升级交付标准白皮书》——2.1 数仓升级的三个目标
带你读《升舱 - 数据仓库升级交付标准白皮书》——2.1 数仓升级的三个目标
102 0
|
3月前
|
存储 并行计算 Cloud Native
带你读《升舱 - 数据仓库升级交付标准白皮书》——2.2 数仓升级的四个原则
带你读《升舱 - 数据仓库升级交付标准白皮书》——2.2 数仓升级的四个原则
104 0
|
6月前
|
SQL BI 索引
【SQL开发实战技巧】系列(二十八):数仓报表场景☞人员分布问题以及不同组(分区)同时聚集如何实现
【SQL开发实战技巧】这一系列博主当作复习旧知识来进行写作,毕竟SQL开发在数据分析场景非常重要且基础,面试也会经常问SQL开发和调优经验,相信当我写完这一系列文章,也能再有所收获,未来面对SQL面试也能游刃有余~。
【SQL开发实战技巧】系列(二十八):数仓报表场景☞人员分布问题以及不同组(分区)同时聚集如何实现
推荐文章
更多