mysql测试数据准备第一天 9月10号数据

1

2

31,待支付,2020-09-10 12:20:11,2020-09-10 12:20:11

2,待支付,2020-09-10 14:20:11,2020-09-10 14:20:11

3,待支付,2020-09-10 16:20:11,2020-09-10 16:20:11

第二天 9月11号数据

1

2

3

4

51,待支付,2020-09-10 12:20:11,2020-09-10 12:20:11

2,已支付,2020-09-10 14:20:11,2020-09-11 14:21:11

3,已支付,2020-09-10 16:20:11,2020-09-11 16:21:11

4,待支付,2020-09-11 12:20:11,2020-09-11 12:20:11

5,待支付,2020-09-11 14:20:11,2020-09-11 14:20:11

对比mysql第一天和第二天的数据发现,第二天新增了订单id为4和5这两条数据,并且订单id为2和3的状态更新为了已支付

全量表

每天所有的最新状态的数据,都要全量抽取到ods层,每个分区保留历史全量快照。

1、全量表,有无变化,都要报

2、每次上报的数据都是所有的数据(变化的 + 没有变化的)

9月10号全量抽取到ods层1

2

3

4

5

6

7

8create table ods_order_info_20200910(

order_id     string    COMMENT '订单id'

,order_status string    COMMENT '订单状态'

,create_time  timestamp COMMENT '创建时间'

,update_time  timestamp COMMENT '更新时间'

) COMMENT '订单表'

row format delimited fields terminated by ','

;

1

2

3

4

5

6

7

8

9create table dwd_order_info_df(

order_id     string    COMMENT '订单id'

,order_status string    COMMENT '订单状态'

,create_time  timestamp COMMENT '创建时间'

,update_time  timestamp COMMENT '更新时间'

) COMMENT '订单表'

partitioned by (date_id string)

row format delimited fields terminated by ','

;

1

2

3

4

5

6

7

8# 把ods_order_info_20200910数据全量插到dwd层2020-09-10分区

insert overwrite table dwd_order_info_df partition(date_id = '2020-09-10')

select

order_id

,order_status

,create_time

,update_time

from ods_order_info_20200910;

9月11号全量抽取到ods层

1

2

3

4

5

6

7create table ods_order_info_20200911(

order_id     string    COMMENT '订单id'

,order_status string    COMMENT '订单状态'

,create_time  timestamp COMMENT '创建时间'

,update_time  timestamp COMMENT '更新时间'

) COMMENT '订单表'

row format delimited fields terminated by ',';

1

2

3

4

5

6

7

8# 把ods_order_info_20200911数据全量插到dwd层2020-09-11分区

insert overwrite table dwd_order_info_df partition(date_id = '2020-09-11')

select

order_id

,order_status

,create_time

,update_time

from wedw_ods.order_info_20200911;

增量表

增量表:新增数据,增量数据是上次导出之后的新数据。

1、记录每次增加的量,而不是总量;

2、增量表,只报变化量,无变化不用报

3、业务库表中需有主键及创建时间,修改时间

9月10号全量抽取到ods层(全量初始化)

1

2

3

4

5

6

7

8# 把ods——order_info_20200910数据全量插到dwd层2020-09-10分区

insert overwrite table dwd_order_info_di partition(date_id = '2020-09-10')

select

order_id

,order_status

,create_time

,update_time

from ods_order_info_20200910;

9月11号抽取更新的数据及当天新增的数据,即订单id为2,3,4,5的数据

dwd_order_info_di表9月10号的分区数据与ods_order_info_20200911增量抽取的数据合并,有2种方案:

a.两个表通过主键关联,dwd表存在并且ods表不存在的数据union all一下ods_order_info_20200911表所有的数据,即全量数据插入到dwd表的9月11号的分区

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22insert overwrite table dwd_order_info_di partition(date_id = '2020-09-11')

select

t1.order_id

,t1.order_status

,t1.create_time

,t1.update_time

from

dwd_order_info_di t1

left join

ods_order_info_20200911 t2

on t1.order_id = t2.order_id

where t1.date_id = '2020-09-10'

and t2.order_id is null

union all

select

order_id

,order_status

,create_time

,update_time

from

ods_order_info_20200911

;

b.两个表数据union all一下,再根据order_id去重(根据order分组,更新时间降序,取第一条)

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38insert overwrite table dwd_order_info_di partition(date_id = '2020-09-11')

select

t2.order_id

,t2.order_status

,t2.create_time

,t2.update_time

from

(

select

t1.order_id

,t1.order_status

,t1.create_time

,t1.update_time

,row_number() over(partition by order_id order by update_time desc) as rn

from

(

select

order_id

,order_status

,create_time

,update_time

from

dwd_order_info_di

where date_id = '2020-09-10'

union all

select

order_id

,order_status

,create_time

,update_time

from

ods_order_info_20200911

) t1

) t2

where t2.rn = 1

;

特殊增量表:da表,每天的分区就是当天的数据,其数据特点就是数据产生后就不会发生变化,如日志表。

拉链表

拉链表维护历史状态,以及最新状态数据适用一下情况:

数据量比较大

表中的部分字段会被更新

需要查看某一个时间点或者时间段的历史快照信息

更新的比例和频率不是很大,如果表中信息变化不是很大,每天都保留一份全量,那么每次全量中会保存很多不变的信息,对存储是极大的浪费优点

9月10号全量抽取到ods层1

2

3

4

5

6

7create table ods_order_info_20200910(

order_id     string    COMMENT '订单id'

,order_status string    COMMENT '订单状态'

,create_time  timestamp COMMENT '创建时间'

,update_time  timestamp COMMENT '更新时间'

) COMMENT '订单表'

row format delimited fields terminated by ',';

建立dwd层拉链表

增加两个字段:

start_dt(表示该条记录的生命周期开始时间周期快照时的状态)

end_dt(该条记录的生命周期结束时间)end_dt= ‘9999-12-31’ 表示该条记录目前处于有效状态

1

2

3

4

5

6

7

8

9

10create table dwd_order_info_dz(

order_id     string    COMMENT '订单id'

,order_status string    COMMENT '订单状态'

,create_time  timestamp COMMENT '创建时间'

,update_time  timestamp COMMENT '更新时间'

,start_dt     date      COMMENT '开始生效日期'

,end_dt       date      COMMENT '结束生效日期'

) COMMENT '订单表'

partitioned by (date_id string)

row format delimited fields terminated by ',';

注:第一次加工的时候需要初始化所有数据,start_time设置为数据日期2020-09-10,end_time设置为9999-12-31

1

2

3

4

5

6

7

8

9

10insert overwrite table dwd_order_info_dz partition(date_id = '2020-09-10')

select

order_id

,order_status

,create_time

,update_time

,to_date(update_time) as start_dt

,'9999-12-31' as end_dt

from

ods_order_info_20200910;

9月11号抽取更新的数据及当天新增的数据到ods层,即订单id为2,3,4,5的数据

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23insert overwrite table dwd_order_info_dz partition(date_id = '2020-09-11')

select

t1.order_id

,t1.order_status

,t1.create_time

,t1.update_time

,t1.start_dt

,case when t1.end_dt = '9999-12-31' and t2.order_id is not null then t1.date_id else t1.end_dt end as end_dt

from

dwd_order_info_dz t1

left join ods_order_info_20200911 t2

on t1.order_id = t2.order_id

where t1.date_id = '2020-09-10'

union all

SELECT

t1.order_id

,t1.order_status

,t1.create_time

,t1.update_time

,to_date(update_time) as start_dt

,'9999-12-31' as end_dt

FROM ods_order_info_20200911 t1

;

查询当前的所有有效记录1

2

3

4

5

6

7select

*

from

dwd_order_info_dz

where

date_id = '2020-09-11'

and end_dt ='9999-12-31';

查询9月10号历史快照1

2

3

4

5

6

7

8select

*

from

dwd_order_info_dz

where

date_id = '2020-09-10'

and start_dt <= '2020-09-10'

and end_dt >='2020-09-10';

查询9月11号历史快照1

2

3

4

5

6

7

8select

*

from

dwd_order_info_dz

where

date_id = '2020-09-11'

and start_dt <= '2020-09-11'

and end_dt >='2020-09-11';

总结

1、如果数据量不是很大(不超过20W)且预估后续增长的非常慢,可以考虑全量表抽取,这是最简便的方法

2、如果数据量目前来说不是很大,但是业务发展很快,数据量一段时间后就会上来,建议增量抽取

3、目前数据量本身就非常大,肯定是需要增量抽取的,比如现在有10亿数据,如果你每天全量抽取一遍,相信我,你会抽哭的

4、对于历史状态需要保存的,这个时候就需要使用拉链表了,实际工作中,使用拉链表的场景并不会太多,比如订单表,保存订单历史状态,维表(缓慢变化维的处理)

hive增量表和全量表_你需要了解的全量表,增量表及拉链表相关推荐

  1. 实验一 线性表的顺序存储与实现_程序员:数据结构与算法,线性表介绍

    线性表 线性表(list):零个或多个数据元素的有限序列. 举个例子:一个班的小朋友,一个跟着一个排队,当中的每个小朋友都知道他前面的是谁,后面的是谁,如同一根线把他们串联起来.就可以称之为线性表. ...

  2. 全栈路线_程序员该走全栈路线还是深度专家路线?

    程序员该走全栈路线,还是深度路线?相信这个问题是所有程序员都会思考的一个问题. 先说说何谓全栈?全栈工程师,英文Full Stack engineer,一般是指能独立完成产品开发的人,同时具备前端和后 ...

  3. mysql技术内幕innodb存储引擎——表索引算法和锁_(转)Mysql技术内幕InnoDB存储引擎-表索引算法和锁...

    表 原文:http://yingminxing.com/mysql%E6%8A%80%E6%9C%AF%E5%86%85%E5%B9%95innodb%E5%AD%98%E5%82%A8%E5%BC% ...

  4. 为什么jsp的form表单不能跳转_手把手教你实现SEM投放监控转化--表单类

    对于SEM投放来说,数据分析是重中之重,为什么要做SEM数据分析?SEM数据分析的最大意义在于总结过去,预判未来,改善投放.然后通过一系列的改善,使账户的投放运作走上良性循环.今天给大家分享表单类获客 ...

  5. mysql 删除表记录的 存储过程命令_用SQL语句删除一个数据库的所有表和所有存储过程...

    如果数据库里有很多表和存储过程,要用手动鼠标右键一个个删除是很麻烦的,用SQL语句来删除就方便很多了 删除所有的表: 如果由于外键约束删除table失败,则先删除所有约束: --/第1步******* ...

  6. layuiajax提交表单控制层代码_无代码搭建系统(一)——流程表单搭建

    迎着2020疫情带来的线上办公.远程协同办公,把无代码带上风口浪尖,众多无代码厂商迅速发展起来,推出自己的无代码产品.实现全民开发,是无代码发展的愿景和目标.数字化和网络化使各行各业的客户对应用开发的 ...

  7. mysql某个表被行锁了_一文搞懂MySQL行锁、表锁、间隙锁详解

    准备工作 创建表 tb_innodb_lock drop table if exists test_innodb_lock; CREATE TABLE test_innodb_lock ( a INT ...

  8. mysql向表中填入数据_教你快速掌握如何向MySQL的表中录入数据

    当我们建好数据库及表后,首先想到的就是向数据库的表中输入数据.下面我们就来探讨一下如何向数据库增加数据: 1.常用的方法是insert语句 以下为引用的内容: insert into tablenam ...

  9. 九九乘法表python语言编程软件_编写Python程序,输出如下的九九乘法表_学小易找答案...

    [其它]写出下图的梯形图程序对应的语句表 (26.0分) [简答题]PLC一般的编程语言有几种?分别是什么? (5.0分) [其它]定义一个getMax函数,返回三个数(从键盘输入的整数)中的最大值. ...

  10. 舞力全开加速_国行舞力全开评测:丝滑得不像是育碧服务器!

    "奶奶你预定的游戏发售啦!" 盼星星盼月亮,从育碧说好的"夏季"等到寒冬,我们终于等来了国行版的<舞力全开>! 试玩版中如是写道 我们也在第一时间购 ...

最新文章

  1. Windows10下安装unbuntu双系统 以及花屏解决办法
  2. linux常用shell命令面试,shell经典笔试题目总结
  3. STL中map用法详解
  4. FckEditor2.6.4在VS2005中的使用过程
  5. LDA的Gibbs抽样详细推理与理解
  6. php dropdownlist,下拉列表多级联动dropDownList示例代码
  7. WEB应用组合——LAMP软件源码编译安装
  8. 国内镜像源的使用,提高下载速度
  9. linux网卡slave状态,生产环境中linux bonding 主备模式slave网卡切换的方法
  10. Java是什么?学了Java我们能干什么?
  11. 测试用例设计(等价类、边界值、因果图、判定表、正交实验)
  12. 用 zotero 管理文献和个人知识库
  13. 吴雪筠校友报告会----职场仪表、心态、自强之道
  14. delegate-委托
  15. 晚稻季湛江廉江 国稻种芯·中国水稻节:广东绿色田野农人忙
  16. Python爬取笑话存储在mysql里
  17. 为什么货币基金每万份收益会突然猛窜?
  18. tair和redis对比
  19. MFC工具箱各种控件的具体意义
  20. 说说那些抢票插件的事

热门文章

  1. java计算机毕业设计 高考志愿填报系统 高考志愿推荐系统 高考志愿填报辅助系统 ssm高考填报系统 志愿填报机器人 高考学校实景3D地图(java+ssm+百度地图+实景3D地图)
  2. 回顾陆奇的传奇人生,下一站是“星辰和大海”
  3. 数据治理:数据治理框架和标准
  4. (一)egg-基础功能
  5. 盛迈坤电商:拼多多营销策划的方法
  6. 大数据系统的学习路径、思维导图
  7. 计算机进制单位tb以上,计算机容量单位的换算 B,KB,MB,GB,TB
  8. Altium Designer 生成 BOM(Bill of Material)
  9. 第五章 矩阵的相似对角化
  10. 微信小程序获取用户位置信息并显示到地图上