1.为什么要做拉链表

拉链表适用于同步新增和变化的数据!对于周期型事实表,采用同步新增和变化的方式!

使用场景:

1)比如订单状态:

三天内该订单状态发生了变化,但是同一个事物内进行的

2)人的出行轨迹

2.拉链表在hive中使用

以同步order_info为例

以下为Mysql中数据的记录形式

2020-02-23

2020-02-24

如果该mysql的表是每天全量同步, 如果不采用拉链表,存在在一张hive的表中,有同一条信息的多条不同时期的状态!比较凌乱,而且很难分别不同的记录之间的顺序关系!

可以采用拉链表,拉(拉取原始数据)链(以链条的形式)表,展示同一条信息,在不同日期的状态,以及同一条信息的随着时间状态的演变顺序!

3.拉链表的形式

(1)查询拉链表中的某天的历史切片

举例查询2020-02-24日在拉链表中的历史切片数据,

代表要查询2020-02-24之前插入的,当前在表中状态是最新的数据!

(2)hive拉拉表制作

1.2020-02-24从mysql同步过来的数据(假如是第一次同步),10个订单数据

2 .2020-02-24从mysql同步过来的数据(假如是第一次同步),3条订单数据

2020-02-25的数据,8号与9号的订单修改了,操作时间为2020-02-25,11号是新增订单

3.创建临时表,结构和目标拉链表一致

create table 临时表名 like ods_order_info

create table dwd_order_info_his_tmp like dwd_order_info_his;

4.混合数据

先插入到临时表,再从临时表查询,覆盖写到拉链表

a)讲拉链表中的所有数据查询出,如果历史数据没有发生变化,不需要修改如果历史数据,和今日新增和变化的数据的id一致,此时需要把历史数据中的end_date从9999-99-99改为当前同步数据的日期-1

b)讲今日的新增和变化数据直接插入到临时表

sql:

insert overwrite TABLE dwd_order_info_his_tmp

SELECT id, total_amount, order_status, user_id, payment_way, out_trade_no, create_time, operate_time,a.dt as start_date,

'9999-99-99' end_date

FROM gmall.ods_order_info a

where dt='2020-02-25'

union all

SELECT oi.id, total_amount, order_status, user_id, payment_way, out_trade_no, create_time, operate_time,

start_date,

if(t.id is null,end_date,date_sub(t.dt,1))end_date

FROM gmall.dwd_order_info_his oi left join

(select id ,dt from ods_order_info where dt='2020-02-25') t

on oi.id=t.id and oi.end_date='9999-99-99'

10.将临时表的数据插入到新表

insert overwrite TABLE dwd_order_info_his

select * from dwd_order_info_his_tmp order by id

1.历史的拉链表数据与今天同步过来的数据进行left join 条件为order_id相等并且结束时间有效,今天的order_id不为空的说明是变化的数据,为空的就是没有变化的和新增的数据

2.if(t.id is null,end_date,date_sub(dt,1))end_date   将变化的end_date改为昨天时间,没有变化仍然不变

3.将历史表所有变化的订单的end_time修改为前一天作为结束时间,说明该订单的这个状态的已经结束了

4.将修改后的历史订单与今天同步(新增的和更新的)进行union all 得到就是某个订单历史状态及目前的状态

5.将临时表dwd_order_info_his_tmp数据覆盖dwd_order_info_his

最终看到 8号与9号订单的历史变化是: 2020-02-24订单状态位1,当天就结束了,到了2020--02-25订单状态变为3

可以明显的看到周期事物表中某个事物的周期变化性

mysql 时间拉链表_拉链表 - 夜半钟声到客船 - 博客园相关推荐

  1. python密码破解工具_一个最简单的博客园文章密码暴力破解器-python3实现

    一个最简单的博客园文章密码暴力破解器-python3实现 我之前想写路由器的密码暴力破解器,我手上只有极路由,发现极路由有安全限制,只能允许连续10密码错误,所以我改拿博客园练手. 博客园的博客有个功 ...

  2. gradle mysql方言_2020 年 4月 随笔档案 - xj_aks - 博客园

    04 2020 档案 摘要:Maven 1. 什么是 Maven ? Maven 是Apache 基金下的个 Java 平台的项目自动化构建工具,基于 2. Maven 可以作什么 自动管理 jar ...

  3. mysql中堆和栈_堆和栈 - 矮油~ - 博客园

    在计算机领域,堆栈是一个不容忽视的概念,我们编写的C语言程序基本上都要用到.但对于很多的初学着来说,堆栈是一个很模糊的概念. 堆栈:一种数据结构.一个在程序运行时用于存放的地方,这可能是很多初学者的认 ...

  4. java 金融面试题目_面试题 - java金融 - 博客园

    1,什么是线程安全 (参考书:https://book.douban.com/subject/10484692/) 不对共享变量进行修改 2,都说String是不可变的,为什么我可以这样做呢 Stri ...

  5. c mysql datasource_DataSource(mysql/oracle) - 随笔分类 - 我爱si搬砖 - 博客园

    摘要:--单行函数:作用于一行,返回一个值--字符函数select upper(deptno),loc from dept;--结果转大写select lower(loc),loc from dept ...

  6. python监听器_监听器 - python成长中 - 博客园

    监听器介绍 监听器 - Listener 监听器(Listener)是J2EE Servlet模块下的组件 Listener的作用对web应用对象的行为进行监控 通过Listener监听自动触发指定的 ...

  7. java 主题爬虫_主题爬虫 - 长颈鹿Giraffe - 博客园

    参考了一些论文和网上的资料以及清华大学出版社出版的<自己动手写网络爬虫>这本书中的部分章节,设计了主题爬虫的主要体系结构如下图所示: Heritrix是一个由 java 开发的.开源的网络 ...

  8. python中变量名字的第一个字符必须是_基础语法 - 小黑_9527 - 博客园

    一.标识符 所谓的标识符就是对变量.常量.函数.类等对象起的名字. 必须说明的是Python语言在任何场景都要严格区分大小写的. 命名规则 1.第一个字符必须是字母中的字母或下划线"_&qu ...

  9. java小光棍数_小光棍数 - NYNU_ACM - 博客园

    小光棍数 时间限制:1000 ms  |  内存限制:65535 KB 难度:1 描述最近Topcoder的XD遇到了一个难题,倘若一个数的三次方的后三位是111,他把这样的数称为小光棍数.他已经知道 ...

最新文章

  1. Dalvik VM进程系统(二):分析Zygote的启动过程
  2. 系统集成资质培训 - 标准系列 -软件文档管理指南
  3. NET Core微服务之路:SkyWalking+SkyApm-dotnet分布式链路追踪系统的分享
  4. centos7设置键盘类型_CentOS 7 系统区域(语言)和键盘设置
  5. 使用W3C标准的DOM处理XML文件[C++和Java版]
  6. 找到某个关键字 同义词词林 python_Python——详解__slots__,property和命名规范
  7. 呼叫中心点击拨打接口升级代码
  8. 什么快捷键切换仅计算机,什么是电脑屏幕切换快捷键
  9. 我的硬件工程师成长之路
  10. 记一次完整的npm包开发 --- 发布过程
  11. 2020年 Top 6+ 最佳免费字体网站
  12. 华为鸿蒙的三大遗憾和一个好消息
  13. Android P 分屏显示
  14. erdas查看灰度直方图_ERDAS图像的基本操作
  15. qt 官网所有版本下载-免注册
  16. 笔记本_cpu_突然性能下降_cpu锁频_cpu降频_重装无用_解锁办法
  17. Page “xxx“ has not been registered yet.
  18. 2019必须了解的网络推广引流方式汇总
  19. 微信公众平台开发(PHP)(五) 天气预报功能开发
  20. python openpyxl 设置表格列宽的自动适应_Python的openpyxl列宽调整大小

热门文章

  1. 百度App应用创新大赛参赛作品:国民教育委员会
  2. 一个IT老兵六年的折腾之路!
  3. 面对百度绿萝算法再次升级SEO要做什么呢?
  4. 经济基础知识(初级)【2】
  5. (正)斜杠/与反斜杠\
  6. keil中报错可能出现的问题
  7. Spring Boot 导入Xml配置
  8. wordpress更新php,wordpress怎么更新
  9. 8月30日云栖精选夜读:Nodejs进阶:使用DiffieHellman密钥交换算法
  10. 处理2倍图片和3倍图片