前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Sqoop之导入到Hive时特殊字符导致数据变乱

Sqoop之导入到Hive时特殊字符导致数据变乱

作者头像
克虏伯
发布2019-09-18 10:26:30
1.3K0
发布2019-09-18 10:26:30
举报

    问题是这样的:

    Sqoop从关系型数据库导入数据到Hive时,发现数据量增多了,查找之后发现是由于源数据中含义\r\t\n特殊字符的数据,这样Hive遇到之后就将其视为换行,所以导入到Hive后数据条数增多了很多,问题找到了,怎么解决呢.

方法1: sqoop的sql中对含有特殊字符的字段进行replace操作,如下List-1所示,将特殊字符转换为空格。

List-1 从mysql导入时用replace

代码语言:javascript
复制
replace(replace(replace(description,'\r',' '),'\n',' '),'\t',' ')

方法2: 使用hive-drop-import-delims,这是sqoop官方提供的一个参数,导入到hive时,遇到特殊字符就会将改字符丢弃,如下List-2

List-2

代码语言:javascript
复制
sqoop import \
--connect jdbc:mysql://xxxxxxx \
--username xxx --password xxx \
--delete-target-dir \
--target-dir /tmp/hive/xxxx_temp \
-m 1 \
--query "SQL查询语句 where \$CONDITIONS" \
--hive-drop-import-delims \
--split-by xxx \
--fields-terminated-by "\t" \
--lines-terminated-by "\n"

    Sqoop还提供了另一个参数--hive-delims-replacement,它会将特殊字符替换为我们设定的字符。

                                                                               图1

    如上图1是官网的截图。由于历史原因,目前我们俩种方式都使用,但是都慢慢的改为方法2了。

Reference

  1. http://sqoop.apache.org/docs/1.4.7/SqoopUserGuide.html
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Reference
相关产品与服务
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档