我尝试用sqoopv1.4将mysql表导入到hive中
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' \
有100排 mysqltbl
其中一块田地 text
包含 \t
以及 \n
,导致sqoop错误地解析数据,即中有100多行 hivetbl
而且磁场没有对齐。
如何在sqoop中指定字段和记录的分隔符,而不是对mysql中的特殊字符进行转义?
1条答案
按热度按时间f4t66c6m1#
您正在使用
--hive-import
,如果不存在,它将为您创建配置单元表。它将使用配置单元的默认分隔符创建字段,字段以:ctrl a结尾,行以:\n
根据演练文件:即使配置单元支持转义字符,它也不处理换行字符的转义。
如果数据库的行包含具有配置单元默认行分隔符的字符串字段,则配置单元将在使用sqoop导入的数据时遇到问题(
\n
以及\r
字符)或列分隔符(\01
(字符)出现在其中。你可以用--hive-drop-import-delims
选项在导入时删除这些字符以提供与配置单元兼容的文本数据。或者,您可以使用--hive-delims-replacement
选项在导入时用用户定义的字符串替换这些字符,以提供与配置单元兼容的文本数据。你可以简单地使用
--hive-drop-import-delims
在你的查询中\n
.如果要替换自己的字符串(例如空格,即“”),可以使用
--hive-delims-replacement
.