Mysql Sqoop使用“创建表架构”;sqoop创建配置单元表“;
我一直在使用带有适当参数的sqoop create hive table命令,将表模式从mysql或任何RDBMS复制到hive中。今天我遇到了一个我必须使用的需求 “sqoop create hive table”和--hive partition键一起创建指定了分区列的表架构。我使用的sqoop命令: sqoop创建配置单元表--连接jdbc:mysql://localhost/XYZ \ --用户名XYZ—密码\ --表POC_XYZ_分区\ --配置单元表POC\U XYZ.POC\U数据类型\U映射\U Sodhi\ --配置单元分区键联接\u日期\ --以“,”结尾的字段--以“\n”结尾的行 出现以下错误消息时出错:Mysql Sqoop使用“创建表架构”;sqoop创建配置单元表“;,mysql,hive,schema,sqoop,Mysql,Hive,Schema,Sqoop,我一直在使用带有适当参数的sqoop create hive table命令,将表模式从mysql或任何RDBMS复制到hive中。今天我遇到了一个我必须使用的需求 “sqoop create hive table”和--hive partition键一起创建指定了分区列的表架构。我使用的sqoop命令: sqoop创建配置单元表--连接jdbc:mysql://localhost/XYZ \ --用户名XYZ—密码\ --表POC_XYZ_分区\ --配置单元表POC\U XYZ.POC\U数
错误sqoop.sqoop:运行sqoop时出现异常:java.lang.IllegalArgumentException:分区键联接\u日期不能是要导入的列。
我知道分区键不应该是CREATETABLE命令的一部分,但我完全忘记了这一点
然后我找到了一份工作,并做了:
sqoop创建配置单元表--连接jdbc:mysql://localhost/XYZ \
--用户名XYZ—密码\
--表POC_XYZ_分区\
--配置单元表POC\U XYZ.POC\U数据类型\U映射\U Sodhi\
--配置单元分区键联接\u日期\u分区\
--以“,”结尾的字段--以“\n”结尾的行
上面创建了模式,但后来当我尝试将数据从mysql加载到hdfs时,它认为join_date_分区是mysql表的一部分,而不是从mysql获取数据
我尝试了许多解决方案,如:
sqoop导入--连接jdbc:mysql://localhost/XYZ \
--用户名XYZ——密码
--查询“从POC_XYZ_分区a中选择一个*a.join_date作为join_date_分区,其中$CONDITIONS”\
--按id拆分\
--hcatalog数据库POC_XYZ\
--hcatalog表POC_XYZ_分区代码>
但是无法导入数据,因为sqoop中存在一个错误,它不允许我在sqoop中复制列名
有没有人面对这个问题并解决了它?如果是这样,请建议似乎-hive分区键(和值)只对上传数据到表中起作用,而对创建表不起作用。这也迫使一次只能加载到一个分区中
但您可以尝试分几个步骤完成任务:
创建一个分区的表
使用-创建配置单元表
,通过sqoop将数据加载到普通配置单元普通配置单元表
使用以下方法将数据加载到分区表中:
插入覆盖表分区的\u表
分区(分区列)
选择col1。。。colN,分区列
从普通桌子代码>配置单元将分区列物理表示为文件夹,并将数据放在相应的文件夹中。问题不在于将数据加载到表中。实际的问题是分区键也必须是数据的值以及正在创建的文件夹。另外,我认为-create配置单元表不会加载数据,而只是创建配置单元表模式。当我们发现这是一个bug时,我们采用了一种解决方案,即分区键使用不同的名称作为数据的一部分,也作为分区键。分区确实包含值:文件夹被称为'month=SEP',其中'month'是分区列名,'SEP'是其值(至少对于hive 0.13是这样)。