sqoop全量导入增量导入及合并

1.sqoop全量导入

mysql import到hive中表的当天分区中,每日都是全量数据.

-m        用来指定maptask的并行度

2.sqoop增量导入

怎么区分哪些是增量数据?

根据id字段来区分什么是增量.

场景:数据不发生变化并且id是递增的

比如昨天导入的id 为1 和 2 的数据,

今天我就可以指定导入where id>2的数据.

--incremental append    业务库的数据是不断增加的并且不会修改
--check-column id       根据id列去看他是新增数据
--last-value 2          上次导到id为2的数据,这次从2以后开始导

代码示例:

## --增量导入 1    --根据一个递增字段来界定增量数据
sqoop import \
--connect jdbc:mysql://wxt01:3306/ry \
--username root \
--password 123456 \
--table jw_stu_zsgl \
--hive-import \
--hive-table test.jw_stu_zsgl \
--split-by id \
--incremental append \
--check-column id \
--last-value 40 \
-m 2
根据updatetime字段来区分什么是增量.

一般我们业务表中的数据都是会发生变化的.所以根据id来确认是否增量数据就不行了.

所以我们根据 lastmoddified 最后修改时间 去判断是否 增量数据.

--incremental lastmoddified          根据最后修改时间来确定增量
--check-column updatetime            表中记录最后修改时间的字段名
--last-value '2021-03-01 23:59:59'   上次导入的时间值.这次从大于value值的数据开始导

代码示例:

## --增量导入 2 --根据修改时间来界定增量数据,  要求必须有一个时间字段,且该字段会跟随数据的修改而修改
## lastmodified 模式下的增量导入,不支持hive导入
sqoop import \
--connect jdbc:mysql://wxt01:3306/ry \
--username root \
--password 123456 \
--table jw_stu_zsgl \
--target-dir '/sqoopdata/jw_stu_zsgl'  \
--incremental lastmodified \
--check-column stu_updatetime \
--last-value '2021-03-01 23:59:59'  \
--fields-terminated-by ',' \
--merge-key id   \
-m 1   \
--append  # 追加而不是覆盖
合并-sqoop自带合并功能
--merge-key id

很少用,每天只保留最新的一份全量数据,看不到历史增量,也就是历史状态数据.

一般合并

增量导入及合并

我们数仓分析指标中有的指标是对业务数据进行分析,比如对订单进行分析的指标.

我们要用sqoop工具将业务库中的订单表导入到hive数据仓库中.

导入的过程:因为订单表数据量特别大,所以我们考虑用增量导入的方式将订单表中每天订单状态发生变化的数据和新增的订单数据导入到hive表分区表中,order表的增量分区表(每个分区存储单天的增量数据).

mysql中订单表有一个updatetime字段记录每个orderId状态发生变化的时间,我们根据这个字段来筛选出增量的数据,并进行导入,是将数据导入到hdfs中某个指定目录中.我们可以将一个hive分区表然后将每天的增量数据load到每天的分区中.

然后再建一个分区表,这个表每个分区储存的是业务库(mysql)中订单表每天的全量数据.

具体实现: 将前一天的全量数据和当天的增量数据进行left join . 拿出前一天全量数据中相对于当天的增量数据中没有发生变化的数据,然后和单天的增量数据 union all (合并) 到一起. 就是单天的全量数据

既有订单表每天的增量数据,也有每天的全量数据.

代码:

select              --业务库表中当天的全量数据
B.orderid,
B.orderstatus,
B.createtime
B.updatetime
from
B left join A
on B.orderid=A.orderid
where B.dt='2020-03-08'
and A.orderid is null
union all            --前一天全量中相对于当天增量中没有的数据
select               
orderid,
orderstatus,
createtime,
updatetime
from A               --当天的增量数据
;

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值