使用 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 表结构