sqoop抽取数据理论及常见问题

sqoop抽取数据问题:倒入ODS

原系统表结构修改问题:抽取数据指定字段

无影响:无需修改hive表结构
  (1).原系统表结构字段顺序调整无影响
  (2).原系统增加字段但HDFS不需要,无影响
  (3).原系统删减字段,sqoop相应字段放空,无影响
  
有影响:
原系统增加字段:需修改hive表结构
  1).不刷历史数据:备份表数据,drop目标表然后create,insert回去
  2).刷历史数据:备份表数据1,sqoop全量抽数到临时表2,drop目标表然后create,备份数据表与临时表join,insert回去


-------------------------------


抽数问题:


1.全量:
  1).不保存历史版本
     直接INSERT OVERWRITE
  2).保存历史版本
     表结构为分区表


2.增量:无分区,也不能有分区:数据要保持与原系统一致
注:现代的数据库中只会修改数据(包括逻辑删除),无物理删除
  sqoop抽数到hive的临时表STG
  select全量数据插入到HIS
  HIS LEFT JOIN STG (根据唯一标识:保证多对一/一对一关联) WHERE中STG根据唯一标识放空
  至此筛选出不需要更新的数据
  UNION ALL STG数据  


注:sqoop抽数只支持文本格式,HDFS为减少成本存储为压缩格式 


)
COMMENT '应收月报'
PARTITIONED BY (PART_SC STRING, PART_DT STRING) 
ROW FORMAT DELIMITED FIELDS TERMINATED BY '\036' 
STORED AS PARQUET
;
 
---------------------------------------


常见问题:


1.sqoop的默认分隔符为:/001,而不是/t


2.字符串为空的问题:String类型为空,非String类型为空


3.字段分隔符 \t,行分隔符/n


4.hive(hdfs目录)导入mysql主要mysql不能有主键,数据类型对应的问题,典型例子:mysql中的tinyint通过sqoop导入hive中自动转换为boolean。


例子:


sqoop export --connect jdbc:mysql://10.143.90.40:3306/Biz_bigdata 


 --username root  --password bigdata --table ODS_CHA_SPREAD_REWARD_RECORD --input-fields-terminated-by '\t'  --lines-terminated-by '\n'  --export-dir '/apps/hive/warehouse/biz_bigdata.db/ods_cha_spread_reward_record' --input-null-string '\\N' --input-null-non-string '\\N'  


5.通过sqoop,hive往mysql到数据时:当字符串过长时,hive中的string类型数据,在mysql中需要用设定为text类型。


6.通过sqoop 从hive往mysql导入数据,当字段为mysql特殊字段,需要改字段名称。


7.倒表一定要注意字段顺序。


8.隐式转换问题:hive往mysql倒数据:tinyint类型时,hive表自动创建则为boolean类型,hive表字段类型为tinyint则数据为NULL,hive表字段为string,数据则为true,false。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值