我尝试用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' \mysqltbl中有100行,其中一个字段text包含\t和\n,这导致Sqoop不正确地解析数据,即hivetbl中有超过100行,而且字段没有对齐。
如何在MySQL中指定字段和记录的分隔符,而不是转义特殊字符?
发布于 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。
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。
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' \https://stackoverflow.com/questions/38364936
复制相似问题