gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 16:30:00 27 4
gpt4 key购买 nike

我尝试使用 Sqoop v1.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 行并且字段未对齐。

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

最佳答案

您正在使用 --hive-import,它将为您创建配置单元表如果不存在。它将使用 Hive 的默认分隔符创建 - 以 CTRL A 终止的字段和以 : \n

终止的行

根据钻头 docs :

Even though Hive supports escaping characters, it does not handle escaping of new-line character.

Hive will have problems using Sqoop-imported data if your database’s rows contain string fields that have Hive’s default row delimiters (\n and \r characters) or column delimiters (\01 characters) present in them. You can use the --hive-drop-import-delims option to drop those characters on import to give Hive-compatible text data. Alternatively, you can use the --hive-delims-replacement option to replace those characters with a user-defined string on import to give Hive-compatible text data.

您可以在查询中简单地使用 --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' \

关于mysql - 使用Sqoop将MySQL导入Hive时如何指定字段分隔符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38364936/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com