数据同步策略

一、表分类

业务数据库里面的数据每天需要同步到我们的数据仓库里面。根据数据量的大小,数据的变化情况,可以分成以下几类:
1、全量表:存储完整的数据
2、增量表:存储新增加的数据
3、新增及变化表:存储新增加的数据和变化的数据
4、特殊表:只需要存储一次的数据

二、同步策略

全量同步策略:
每日全量,就是每天存储一份完整的数据,作为一个分区
适用于表中数据量很小,每天可能会有数据新增或者数据修改的情形。

增量同步策略:
每日增量,就是每天存储一份增量数据,,作为一个分区
适用于数据量大,每天都会向表中新增数据的场景(支付流水表)

新增和变化同步策略:
每日新增及变化,就是基于创建时间和操作时间都是今天的数据
适用于数据量大,每天不仅会新增数据,还会有历史数据发生变化(订单表,用户表)
该种情况最经常采用的是拉链表来解决,拉链表会有dp和dt两个分区,dp的值有ACTIVE和EXPIRED两个分区,ACTIVE代表当前这条数据是有效的,而EXPIRED代表的是当前这条数据是过期的。dt分区每天存储的也是历史到现在的全量数据,每个dt分区里面的数据都包含新增和修改的数据。
拉链表有一篇比较好的文章,需要复习的时候可以翻出来看一看:拉链表详解

特殊策略:
某些特殊的维度表,可不必遵循上述同步策略
例如:地区表,省份表,日期表,可以只导入一次即可

有时候在想,数仓中的表有同步策略,这个同步策略在哪里看呢?是建表语句吗?显然不是。是在sqoop中看参数。

全量同步: 查询最新的分区,就是所有的数据。
缺点就是:hdfs越来越大。

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
打个比方:
1月1号的数据,存到hdfs之后。
1月2号的数据,以及1月1号中发生变化的数据,存到对应1月2号的分区。
导数据的时候,导入分时候条件就是创建时间是1月1号的,或者是operate的时间是1月2的(1月1日或者更早的数据在1月2号修改了,那么这个时间就是1月2号)。
这样的话,就是导入的是新增得数据,以及和变化的数据。

具体的就是,业务数据从MySQL中导入hdfs的脚本里面,进行的指定条件。

这里面就是全量同步,从MySQL中,因为后面的条件是where 1=1,也就是无条件的导入,也就是全量的导入。

import_sku_info(){
  import_data sku_info "select 
                          id,
                          spu_id,
                          price,
                          sku_name,
                          sku_desc,
                          weight,
                          tm_id,
                          category3_id,
                          create_time
                        from sku_info where 1=1"
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值