sqoop export 分隔符问题

sqoop 导出如果分隔符指定的不对会导致hive 进sqoop 数据不能正确的分隔,会造成导出任务失败。

 

 

Hive应用:选取分隔符

在使用hive的时候,分隔符是必不可少的,当学习的时候使用的都是常规分隔符,比如:逗号“,”、竖线“|”等,这些键盘上都可以直接输入的字符,但是这些字符只要是键盘上的,在针对复杂的业务逻辑的时候,都会失效。

比如你有一个备注字段,这个字段允许用户输入输入键盘上的任何字符,一旦用户输入了你选择的分隔符,那么Hive在使用这个数据的时候,就会导致hive表中的字段错位。

使用多个组合字符,也可以成为一种选择,但是有些导入导出工具,不支持多字符分隔符,比如:阿里的DATAX就不支持多字符分隔符。

那么现在我们就需要一种字符,是用户输入不了的,计算机又存在的字符,下面这些字符则可以满足需求!

1、特殊字符

以下这些字符是可以在Hive中应用,并且DATAX也支持的:

chardigraphhexdecofficial nameUnicode
^@NU0x000NULL (NUL)N\u0000
^ASH0x011START OF HEADING (SOH)\u0001
^BSX0x022START OF TEXT (STX)\u0002
^CEX0x033END OF TEXT (ETX)\u0003
^DET0x044END OF TRANSMISSION (EOT)\u0004
^EEQ0x055ENQUIRY (ENQ)\u0005
^FAK0x066ACKNOWLEDGE (ACK)\u0006
^GBL0x077BELL (BEL)\u0007
^HBS0x088BACKSPACE (BS)\u0008
^IHT0x099CHARACTER TABULATION (HT)\u0009
^@LF0x0a10LINE FEED (LF)\u0010
^KVT0x0b11LINE TABULATION (VT)\u0011
^LFF0x0c12FORM FEED (FF)\u0012
^MCR0x0d13CARRIAGE RETURN (CR)\u0013

注意:特殊符号中的^ 和键盘上的^ 字符是不一样的。另外特殊符号中的^和后面跟的字符是一体的,也就是说,两个字符是一个符号。

 

问题来了 如果hive 的数据中包含这种数据,你不看hdfs 文件的话,打死也发现不了

这种情况要根据错误找到数据错误的行,来定位数据在哪 yarn上mapreduce的日志里会打印出有错误数据的行,然后把hdfs的文件下载下来查看,文本编辑器打开,我用的数sublime 能显示出来。

在 sqoop 的命令里添加 -Dorg.apache.sqoop.export.text.dump_data_on_error=true

sqoop export -Dorg.apache.sqoop.export.text.dump_data_on_error=true \

 

然后正则匹配替换掉

 regexp_replace(m.changed_way,'([\\u0000-\\u0013]+)','')

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值