当前位置: 首页 > news >正文

hive 全量表、增量表、快照表、切片表和拉链表

全量表:记录每天的所有的最新状态的数据,
增量表:记录每天的新增数据,增量数据是上次导出之后的新数据。
快照表:按日分区,记录截止数据日期的全量数据
切片表:切片表根据基础表,往往只反映某一个维度的相应数据。其表结构与基础表结构相同,但数据往往只有某一维度,或者某一个事实条件的数据                                                                     拉链表:记录每条信息的生命周期,当一条记录的生命周期结束,就会重新开始一条新的记录,并把当前日期放入生效开始日期。如果当前信息至今有效,则在生效结束日期中填入一个极大值(如9999-99-99) ,一般在数仓中通过增加start_date,end_date两列来表示。

拉链表适合于数据会发生变化,但是大部分是不变的。

使用拉链表的方式:通过生效开始日期<= 某个日期 生效结束日期>=某个日期,能够得到某个时间点的数据全量切片。

拉链表的形成过程,比如下图

 

如何制作拉链表?
1)新建和初始化拉链表dwd_order_info_his(首次独立执行)

drop table if exists dwd_order_info_his;
create external table dwd_order_info_his(`id` string COMMENT '订单编号',`total_amount` decimal(10,2) COMMENT '订单金额',`order_status` string COMMENT '订单状态',`user_id` string COMMENT '用户id' ,`payment_way` string COMMENT '支付方式',`out_trade_no` string COMMENT '支付流水号',`create_time` string COMMENT '创建时间',`operate_time` string COMMENT '操作时间',`start_date`  string COMMENT '有效开始日期',`end_date`  string COMMENT '有效结束日期'
) COMMENT '订单拉链表'
stored as parquet
location '/warehouse/gmall/dwd/dwd_order_info_his/'
tblproperties ("parquet.compression"="snappy");insert overwrite table dwd_order_info_his
selectid,total_amount,order_status,user_id,payment_way,out_trade_no,create_time,operate_time,'2019-01-01','9999-99-99'
from ods_order_info oi
where oi.dt='2019-01-01';


2)获取当日变动数据:包括新增和修改(每日执行)

//当天的订单变化表dwd_order_info数据获取:

INSERT overwrite TABLE dwd_order_info PARTITION (day = '2019-01-02')
SELECT orderid,status
FROM orders
WHERE (createtime = '2019-01-02'  and modifiedtime = '2019-01-02') OR modifiedtime = '2019-01-02';


3)合并变动数据和旧拉链表数据(有更新的信息需要修改生效结束日期,无更新的信息生效结束日期不变)之后插入到临时表中
比如下图:


4)用临时表覆盖旧拉链表 

insert overwrite table dwd_order_info_his 
select * from dwd_order_info_his_tmp;


 

http://www.lryc.cn/news/97967.html

相关文章:

  • 数据结构07:查找[C++][B树Btree]
  • 在CSDN学Golang云原生(Kubernetes集群管理)
  • WPF实战学习笔记18-优化设计TodoView
  • Python版day59
  • [SQL挖掘机] - 算术运算符
  • 机器学习基础 数据集、特征工程、特征预处理、特征选择 7.27
  • Sass 常用的功能!
  • chmod命令详细使用说明
  • ICC2如何计算Gate Count?
  • Qtday3作业
  • 全球程序员需要知道的50+网址,有多少你第一次听说?
  • Matlab中实现对一幅图上的局部区域进行放大
  • mysql-速成补充
  • 微信小程序,商城底部工具栏的实现
  • Lab———Git使用指北
  • ChatGPT的工作原理:从输入到输出
  • redis数据库与主从复制
  • js加载和长任务
  • 利用Stable diffusion Ai 制作艺术二维码超详细参数和教程
  • 【C语言课程设计】图书管理系统
  • 在 ArcGIS Pro 中使用 H3 创建蜂窝六边形
  • 创建Electron项目
  • Spring Boot实践一
  • 简单认识NoSQL的Redis配置与优化
  • 开发一个RISC-V上的操作系统(二)—— 系统引导程序(Bootloader)
  • Git安装与学习
  • 【Docker】docker中容器之间通信方式
  • 算法-归并排序-JAVA
  • Flask 进阶
  • home-assistant整合sso