我一直在使用sqoop create-hive-table命令和适当的参数,这些参数会将表格模式从mysql或任何RDBMS复制到配置单元中。今天我碰到一个要求,我必须使用Sqoop使用“sqoop create-hive-table”创建表模式
“sqoop create-hive-table”和--hive-partition-key来创建指定了分区列的表模式。所述sqoop命令我使用:
sqoop创建-蜂房表--connect JDBC:MySQL的://本地主机/ XYZ \ --username XYZ --password密码\ --table POC_XYZ_Partition \ --hive-表POC_XYZ.POC_Datatype_Mapping_Sodhi \ --hive分区密钥join_date \ --fields封端-由 '' --lines封端-用 '\ 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重复列名的数据。
有没有人遇到过这个问题并解决了它?如果是这样,请建议
蜂房表示分配塔物理作为文件夹,并把数据存储在各自的文件夹。问题不在于将数据加载到表中。实际的问题是将分区键也作为数据的值以及正在创建的文件夹。 此外,我认为-create-hive-table不会加载数据,但只是创建配置单元表架构。 因为我们发现这是一个错误,我们使用了一个解决方案,使分区键具有不同的名称,使其成为数据的一部分,并且还作为分区键。 – Maverick4U 2014-11-10 20:59:29
分区确实包含值:文件夹被称为'month = SEP',其中'month'是分区列名,'SEP'是它的值(至少对于hive 0.13是这样的)。 – arghtype 2014-11-11 06:26:04