hive外部表数据导入时多一条的问题

        导入hive中的数据默认的列分隔符是'\001',默认的行分隔符是'\n'。如果导入的数据中有'\n',hive会认为一行已经结束,后面的数据被分割成下一行。这种情况下,导入之后hive中数据的行数就比原先数据库中的多,而且会出现数据不一致的情况。

        sqoop在导入时可以指定分隔符和换行符,参数--fields-terminated-by和 --lines-terminated-by分别自定义行分隔符和列分隔符,虽然通过 --lines-terminated-by指定了其他的字符作为行分隔符,但是不起作用,因为hive只支持'\n'作为行分隔符。简单的解决办法就是加上参数 --hive-drop-import-delims来把导入数据中包含\n 分隔符去掉。

       这样一般情况就不会出问题了,但是我在实际操作过程中还是遇到了指定--hive-drop-import-delims这一参数后还是出现了多一行的问题。

      问题描述:sqoop将mysql数据导入到hive的外表,在导入的过程中指定了各种参数,还是出现了多一条的问题,导入语句

sqoop import "-Dorg.apache.sqoop.splitter.allow_text_splitter=true" \

--hive-import \

--connect jdbc:mysql://localhost:3306/databaseName?characterEncoding=UTF-8 \

--username **** \

--password ****\

--query "select * from tableName where \$CONDITIONS" \

--hive-import -m 3 \

--split-by id \

--hive-database hiveDatabaseName \

--hive-table hiveTableName \

--target-dir /*/* \

--fields-terminated-by "\t" \

--hive-drop-import-delims \

--lines-terminated-by "\n" \

--delete-target-dir

试了各种参数改变,最后将"-m 3"改为"-m 1"解决了这多一条的问题,原因不知道,猜测大概是因为分隔数据的id不是数字类型导致的,以为如果id不是int类型,mr在将数据分成3份的时候不能更好的处理,所以-m 1 只进行一个任务就不会出现数据错乱了。如果你知道为什么,可以留言,谢谢!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值