sqoop 处理换行符 \n 和\r 等特殊符号处理

  • Post author:
  • Post category:其他


公司大数据平台ETL操作中,在使用sqoop将mysql中的数据抽取到hive中时,由于mysql库中默写字段中会有换行符,导致数据存入hive后,条数增多(每个换行符会多出带有null值得一条数据),导致统计数据不准确。因为sqoop 导出文件不能是ORC这种列式存储,所以只能替换。导出后对替换的字符在进行替换,将数据表存储 orc


解决办法:

利用一下两个参数可以实现对换行等特殊字符的替换或者删除


  • --hive-delims-replacement

  • --hive-drop-import-delims


使用方法,


1、在原有sqoop语句中添加 --hive-delims-replacement “ ” 可以将如mysql中取到的\n, \r, and \01等特殊字符替换为自定义的字符,此处用了空格


2、在原有sqoop语句中添加 --hive-drop-import-delims 可以将如mysql中取到的\n, \r, and \01等特殊字符丢弃




给个具体的例子:


/usr/local/sqoop/bin/sqoop-import –connect jdbc:mysql://ip:port/xxx –username xxxx –password xxxx  –table data_clt_app_info_1210 –target-dir /tmp/tmp_data_clt_app_info_text_1210_bak –fields-terminated-by ‘||’  -m 1 –split-by stat_date –delete-target-dir –hive-delims-replacement ‘aaaaaaaa’

大功告成

把特殊换行换成 aaaaaaaa

create table tmp.change_orc stored as orc as

select stat_date,app_id,queue,start_time,finish_time,regexp_replace(job_name,’aaaaaaaa’,’ \n ‘) as job_name from tmp.tmp_data_clt_app_info_text_1210_bak



版权声明:本文为wuzhilon88原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。