使用 create-hive-table 在 Hive 中创建表时如何使用自定义分隔符

Posted

技术标签:

【中文标题】使用 create-hive-table 在 Hive 中创建表时如何使用自定义分隔符【英文标题】:How to use custom delimiter while creating table in Hive using create-hive-table 【发布时间】:2016-01-27 13:04:47 【问题描述】:

我正在尝试将数据从 RDBMS 表导入 HDFS。然后我使用 create-hive-table 将架构复制到配置单元,然后将数据加载到该配置单元表。

用于导入 HDFS 的命令

sqoop import --connect jdbc:mysql://localhost/sqoop --username sqoop --password sqoop --table customers --warehouse-dir testingsqoop -m 1 --fields-terminated-by ',' --enclosed-by "\'" --lines-terminated-by "\n"

用于创建 hive 表的命令:

sqoop create-hive-table --connect jdbc:mysql://localhost/sqoop --username sqoop --password sqoop --table customers --hive-table customers --fields-terminated-by "," --enclosed-by "\'" --lines-terminated-by "\n"

最后是用于将数据加载到 hive 的查询

load data inpath '/user/cloudera/testingsqoop/customers/*' into table customers;

由于我用单引号 ' 将字段括起来,因此在创建表时 hive 没有考虑 --enclosed-by 标志,因此 hive 表中的列仍然带有引号 '

NULL  'Richard'  'Hernandez'  'XXXXXXXXX'  'XXXXXXXXX'  '6303 Heather Plaza'  'Brownsville'  'TX'  '78521'

但是,如果我不使用--enclosed-by,它可以正常工作,但我想拥有它。

1) 你能帮忙解决这个问题吗?

2) 还有什么方法可以为字段终止符指定多个字符?

谢谢!

【问题讨论】:

【参考方案1】:

试试下面,

--fields-terminated-by \01 --hive-drop-import-delims --空字符串\N --null-非字符串 \N

在您的 sqoop 导入数据查询和 hive 表定义查询中。

【讨论】:

【参考方案2】:

    很可能是您的语法导致了异常。尝试使用:

    --用“'”括起来

而不是\'。

    是的,您可以导入多个字符作为字段分隔符。

【讨论】:

以上是关于使用 create-hive-table 在 Hive 中创建表时如何使用自定义分隔符的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 sqoop import-mainframe --create-hive-table 命令定义 hive 表结构

sh cca175-problem-03-create-hive-table.sh

Sqoop导入所有不与Hive数据库同步的表

使用递归来查找字符串中的“hi”数而不是“xhi”

Hi3536DV100 SDK 安装以及升级使用说明

连接字符串中的数值