首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在使用Sqoop将MySQL导入Hive时指定字段分隔符?

如何在使用Sqoop将MySQL导入Hive时指定字段分隔符?
EN

Stack Overflow用户
提问于 2016-07-14 03:21:18
回答 1查看 7.1K关注 0票数 0

我尝试用Sqoopv1.4将一个MySQL表导入到Hive中。

代码语言:javascript
复制
sqoop import --connect jdbc:mysqll//localhost:3306/mysqldb \
--username user --password pwd --table mysqltbl \
--hive-import --hive-overwrite \
--hive-table hivedb.hivetbl -m 1 \
--null-string '\\N' \
--null-non-string '\\N' \

mysqltbl中有100行,其中一个字段text包含\t\n,这导致Sqoop不正确地解析数据,即hivetbl中有超过100行,而且字段没有对齐。

如何在MySQL中指定字段和记录的分隔符,而不是转义特殊字符?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-07-14 04:09:18

您正在使用--hive-import,如果不存在,它将为您创建表。它将使用Hive的默认分隔符-字段以: CTRL A结尾,以:\n结尾的行创建

按钻取文档

即使Hive支持转义字符,它也不处理新行字符的转义。 如果数据库的行包含具有Hive默认行分隔符(\n\r字符)或列分隔符(\01字符)的字符串字段,则使用Sqoop导入的数据将出现问题。您可以使用--hive-drop-import-delims选项在导入中删除这些字符,以提供与Hive兼容的文本数据。或者,您可以使用--hive-delims-replacement选项在导入时用用户定义的字符串替换这些字符,以提供与Hive兼容的文本数据。

您只需在查询中使用--hive-drop-import-delims,它就会删除\n

代码语言:javascript
复制
sqoop import --connect jdbc:mysqll//localhost:3306/mysqldb \
--username user --password pwd --table mysqltbl \
--hive-import --hive-overwrite \
--hive-table hivedb.hivetbl -m 1 \
--hive-drop-import-delims \
--null-string '\\N' \
--null-non-string '\\N' \

如果您想替换您自己的字符串(例如空格,即“"),可以使用--hive-delims-replacement

代码语言:javascript
复制
sqoop import --connect jdbc:mysqll//localhost:3306/mysqldb \
--username user --password pwd --table mysqltbl \
--hive-import --hive-overwrite \
--hive-table hivedb.hivetbl -m 1 \
--hive-delims-replacement " " \
--null-string '\\N' \
--null-non-string '\\N' \
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38364936

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档