Sqoop使用" sqoop create-hive-table"创建表模式。

时间:2014-10-02 22:26:29

标签: mysql hive schema sqoop

我一直在使用sqoop create-hive-table命令和适当的参数,这些参数会将表模式从mysql或任何RDBMS复制到hive中。今天我遇到了一个必须使用

的要求

“sqoop create-hive-table”以及--hive-partition-key以创建指定了分区列的表模式。我使用的sqoop命令:

sqoop create-hive-table --connect jdbc:mysql:// localhost / XYZ \ --username XYZ - 密码密码 - 表POC_XYZ_Partition \ --hive-table POC_XYZ.POC_Datatype_Mapping_Sodhi \ --hive-partition-key join_date \ --fields-terminated-by',' - lines-terminated-by'\ n'

出错了错误消息:

ERROR sqoop.Sqoop: Got exception running Sqoop: java.lang.IllegalArgumentException: Partition key join_date cannot be a column to import.

我知道分区键不应该是create table命令的一部分,但我完全忘了。

然后我找到了解决办法并做了:

sqoop create-hive-table --connect jdbc:mysql://localhost/XYZ \ --username XYZ --password password \ --table POC_XYZ_Partition \ --hive-table POC_XYZ.POC_Datatype_Mapping_Sodhi \ --hive-partition-key join_date_partition \ --fields-terminated-by ',' --lines-terminated-by '\n'

上面创建了模式,但后来当我尝试将数据从mysql加载到hdfs时,它正在考虑将join_date_partition作为mysql表的一部分而不是从mysql获取数据。

我尝试了许多解决方案,如:

sqoop import --connect jdbc:mysql://localhost/XYZ \ --username XYZ --password password \ --query 'select a.*, a.join_date as join_date_partition from POC_XYZ_Partition a WHERE $CONDITIONS' \ --split-by id \ --hcatalog-database POC_XYZ \ --hcatalog-table POC_XYZ_Partition;

但无法导入数据,因为sqoop中的错误不允许我复制sqoop中的列名。

有人遇到过这个问题并解决了吗?如果是这样,请建议

1 个答案:

答案 0 :(得分:1)

似乎-hive-partition-key(和值)仅对将数据上传到表而不是用于表创建很重要。这也迫使一个人只加载到一个分区。

但你可以尝试分几步完成任务:

  1. 创建 partitioned_table
  2. 将带有-create-hive-table的sqoop数据加载到普通配置单元 plain_table
  3. 使用以下内容将数据加载到分区表中:
  4. INSERT OVERWRITE TABLE partitioned_table PARTITION(partitionColumn) SELECT col1, ... colN, partitionColumn FROM plain_table;