什么时候使用拉链表?

当数据存在有变更的情况时,可以采用渐变维(SCD)模型来解决。这里推荐使用SCD2拉链 表。拉链表既可以反应数据的历史状态,又能在最大程度上节省存储。 拉链表的实现需要在原始字段基础上增加两个新字段:

  • start_date(表示该条记录的生命周期开始时间——周期快照时的状态)
  • end_date(该条记录的生命周期结束时间)

拉链表插入数据流程

  1. ODS抽取新增/变更数据;

  2. 重建临时表tmp;

  3. 合并昨日增量数据(ods表)与历史数据(拉链表)到临时表

    (1) 新数据(员工)end_date设为‘9999-99-99’,也就是当前有效;

    (2) 如果增量数据有重复id的旧数据(未离职老员工),将旧数据end_date(退休日期)更新为前天(昨天-1),也就是从昨天开始不再生效;

    (3) 合并后的数据写入tmp表;

  4. 将临时表的数据,覆盖到拉链表中;

  5. 第二天再次循环。

合并新旧数据的完整代码

  • 新数据☞:导入数据时间的前一天更新的和新增的数据
  • 旧数据☞:导入数据时间的昨天的昨天不再发生变化的数据
insert overwrite table yp_dwd.fact_shop_order_tmp partition (start_date)
select *
from (-- 一、ods表的新数据select id,order_num,buyer_id,store_id,-- 转换case order_fromwhen 1 then 'android'when 2 then 'ios'when 3 then 'miniapp'when 4 then 'pcweb'else 'other' end as order_from,order_state,create_date,finnshed_time,is_settlement,is_delete,evaluation_state,way,is_stock_up,create_user,create_time,update_user,update_time,is_valid,'9999-99-99'            end_date,'${TD_DATE}'         as start_datefrom yp_ods.t_shop_order-- 过滤where dt = '${TD_DATE}'and id is not nulland buyer_id is not nulland store_id is not nulland create_date is not null
union all
-- 二、历史拉链表数据,并根据up_id判断更新end_time有效期
select fso.id,fso.order_num,fso.buyer_id,fso.store_id,fso.order_from,fso.order_state,fso.create_date,fso.finnshed_time,fso.is_settlement,fso.is_delete,fso.evaluation_state,fso.way,fso.is_stock_up,fso.create_user,fso.create_time,fso.update_user,fso.update_time,fso.is_valid,-- 3、更新end_time:如果没有匹配到变更数据,或者当前已经是无效的历史数据,则保留原始end_time过期时间; 否则变更end_time时间为前天(昨天之前有效)if(up.id is null or fso.end_date < '9999-99-99', fso.end_date, date_add(up.dt, -1)) end_date,fso.start_date
from yp_dwd.fact_shop_order fsoleft join (select * from yp_ods.t_shop_order where dt = '${TD_DATE}') upon fso.id = up.id
-- 4、时间限制:如果订单的变更周期是30天则可加上此条件,结果会按照所属分区进行覆盖插入
-- where fso.start_date >= date_add(up.dt, -30)
) his
order by his.id, start_date;

合并数据时的left join的作用

拉链表(SCD2)的操作相关推荐

  1. 意向客户主题看板 阿善有用 前边有用后面没用 拉链表

    今日内容:1) 分桶表的相关优化 -- 理解2) 建模分层操作 -- 需要操作3) 全量流程的统计分析: -- 需求操作 (尝试自己实现) 数据的采集, 数据的清洗转换, 数据维度退化, 数据的统计分 ...

  2. DataBase 之 拉链表结构设计

    一.概念 拉链表是针对数据仓库设计中表存储数据的方式而定义的,顾名思义,所谓拉链,就是记录历史.记录一个事物从开始,一直到当前状态的所有变化的信息. 在历史表中对客户的一生的记录可能就这样几条记录,避 ...

  3. update 两个表关联_拉链表(二)

    拉链表(一) 拉链表(二) 一.前言 在上一节简单介绍了拉链表,本节主要讲解如何通过binlog采集MySQL的数据并且按月分区的方式实现拉链表. 这里以上节介绍的用户表(user) 举例 二.涉及到 ...

  4. 单张表超过30个字段_拉链表

    为什么要做拉链表 拉链表适合于:数据会发生新增和变化,但是大部分是不变的,且是缓慢变化的(如电商中用户信息表中的手机号不可能每天都变化),如果是快速变化的(如每天一变),则每天做全量更新(事务型事实表 ...

  5. hive增量表和全量表_hive 拉链表 实现全量数据 增量更新

    背景: 数据表字段有IP,IP省份,IP城市,最新访问时间,假如目前一共有100W的IP我第一次初始化的时候完成初始化表插入,然后每天都有5W左右的IP活跃,然后我要更新这5W个IP的记录到初始化的表 ...

  6. 2清空所有表_拉链表(二)

    拉链表(一) 拉链表(二) 一.前言 在上一节简单介绍了拉链表,本节主要讲解如何通过binlog采集MySQL的数据并且按月分区的方式实现拉链表. 这里以上节介绍的用户表(user) 举例 二.涉及到 ...

  7. 现在银行etl还要做拉链表吗_hive 拉链表 实现全量数据 增量更新

    背景: 数据表字段有IP,IP省份,IP城市,最新访问时间,假如目前一共有100W的IP我第一次初始化的时候完成初始化表插入,然后每天都有5W左右的IP活跃,然后我要更新这5W个IP的记录到初始化的表 ...

  8. hive中实现行转列_漫谈数据仓库之拉链表(原理、设计以及在Hive中的实现)

    全文由下面几个部分组成: 先分享一下拉链表的用途.什么是拉链表. 通过一些小的使用场景来对拉链表做近一步的阐释,以及拉链表和常用的切片表的区别. 举一个具体的应用场景,来设计并实现一份拉链表,最后并通 ...

  9. 【clickhouse】数据仓库中的拉链表(Clickhouse 实现)

    文章目录 1.概述 在 Clickhouse 中实现拉链表 一. 每日的用户更新表: 二. ods 层的 user 表: ods 层的 user_update 表 拉链表: 拉链表和流水表: 查询性能 ...

最新文章

  1. CoinMarketCap计划于11月发布新的流动性排名系统
  2. 常见虚拟主机目录对照及星外提权目录
  3. html封装windows,windows 系统封装,打造一份属于自己的系统!
  4. Cloud一分钟 | 一脚踏入云计算2.0时代,京东云这回拼的是“朋友 圈”;8400万元私有云招标...
  5. 图片复印如何去除黑底_身份证复印机中间有黑线怎么办
  6. CFNetwork 框架详细解析
  7. 实验1 查看cpu和内存,用机器指令和汇编指令编程
  8. IAR使用技巧 之 快捷键批量更换指定字符(以及Keil的全局替换功能)
  9. IDEA怎么设置背景图片
  10. NSGA_2总结梳理附代码按行详细注解
  11. 个别海康摄像机通过国标GB28181接入EasyCVR,视频无法打开的解决办法
  12. magick++配置
  13. UINO优锘:数据中心可视化管理面向运营的IT运维配置管理
  14. 医学影像分割论文合集
  15. c#的decode用法
  16. 微信小程序:WeUI一个专为微信小程序设计的UI框架
  17. 在linux系统下忘记了root密码,在linux系统下,忘记了root密码,可以到()模式下修改找回root密码()...
  18. UG/NX 二次开发(C#)自动出2D零件图思路
  19. active英语怎么读音_inactive,inactive的英文意思和翻译,inactive的音标读音,用法,例句,发音,含义讲解...
  20. Charles 限制网络速度(Throttle设置)

热门文章

  1. 余弦相似性 Cosine-Similar
  2. 国产Excel开发组件Spire.XLS【转换】教程(14):如何在 C# 中将 Excel 工作表转换为 EMF 图像
  3. el-tabe单元格合并
  4. CST仿真指导 | 参数寻优问题求解——Parameter Sweep、Optimization
  5. Brave Song
  6. 如何用Pact进行微服务集成测试(二)
  7. python 怎么输入字符上的横线_python 怎么输入字符上的横线_字符上方的横线怎么用MathType编辑...
  8. Linux 让普通用户拥有root的权限
  9. sqlmap之tamper的使用介绍
  10. FL Studio 21中文永久版网盘下载(含Key.reg注册表补丁)