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

 

公司大数据平台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  

你可能感兴趣的:(spark2.x)