Sqoop

sqoop
同步数据的时候考虑:

数据量大小、增长量、是否要初始化、是否要补历史数据
数据是否会存在变化
数据同步方式,日?月?增量?全量?

全量导入:数据量在600w以下的全量导入
增量导入:
(1) 数据量大,不涉及更新数据历史变化,就按照etl日期,每天保存一个分区
(2) 数据量大,涉及更新数据历史变化,按照数据更新日期 = etl日期,每天保存一个分区,存到zz_表名的表中,然后从增量表中按照主键分组date_upated日期排序,取updated最新的一条插入到目标表中
比如:交易对账、结算明细表:有支付金额,交易金额,后续涉及金额修改,更新了数据
账单库(理赔):账单金额,涉及到一些金额变化的表的数据

默认是4个map数
遇到的问题:
Hive中的Null在底层是以“\N”来存储,而MySQL中的Null在底层就是Null,为了保证数据两端的一致性。
在导出数据时采用–input-null-string和–input-null-non-string两个参数。
导入数据时采用–null-string和–null-non-string。

sqoop导出数据一致性问题 --staging-table
当Sqoop导出数据到MySql时,使用4个map怎么保证数据的一致性
因为在导出数据的过程中map任务可能会失败,可以使用—staging-table –clear-staging
任务执行成功首先在tmp临时表中,然后将tmp表中的数据复制到目标表中(这个时候可以使用事务,保证事务的一致性)

sqoop导数到hive的时候,hive表要建成textfile格式
原因:sqoop不能解析ORC/parquet格式的⽂件???

query自由查询导入时,sql语句中必须带 $CONDITIONS条件 : where $CONDITIONS ,要
么 where id>20 and C O N D I T I O N S 原因:因为 s q o o p 要将你的 s q l 语句交给多个不同的 m a p t a s k 执行,每个 m a p t a s k 执行 s q l 时肯定要按任务规划加范围条件,所以就提供了这个 CONDITIONS 原因:因为sqoop要将你的sql语句交给多个不同的maptask执行,每个maptask执行sql时肯定要按任务规划加范围条件,所以就提供了这个 CONDITIONS原因:因为sqoop要将你的sql语句交给多个不同的maptask执行,每个maptask执行sql时肯定要按任务规划加范围条件,所以就提供了这个CONDITIONS作为将来拼接条件的占位符

公司大数据平台ETL操作中,在使用sqoop将mysql中的数据抽取到hive中时,由于mysql库中默写字段中会有换行符,导致数据存入hive后,条数增多(每个换行符会多出带有null值得一条数据),导致统计数据不准确。
利用一下两个参数可以实现对换行等特殊字符的替换或者删除
–hive-delims-replacement
–hive-drop-import-delims

在原有sqoop语句中添加 --hive-delims-replacement “ ” 可以将如mysql中取到的\n, \r, and \01等特殊字符替换为自定义的字符,此处用了空格
在原有sqoop语句中添加 --hive-drop-import-delims 可以将如mysql中取到的\n, \r, and \01等特殊字符丢弃
补历史数据的时候要从前面日期往后面日期补,否则会有老数据覆盖新数据的情况

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值