Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql Sqoop使用“创建表架构”;sqoop创建配置单元表“;_Mysql_Hive_Schema_Sqoop - Fatal编程技术网

Mysql Sqoop使用“创建表架构”;sqoop创建配置单元表“;

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 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”结尾的行

出现以下错误消息时出错:

错误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是这样)。