错误无法识别的参数-配置单元分区键

c7rzv4ha  于 2021-06-02  发布在  Hadoop
关注(0)|答案(2)|浏览(357)

我犯了个错误 Unrecognized argument --hive-partition-key ,当我运行以下语句时:

sqoop import 
--connect 'jdbc:sqlserver://192.168.56.1;database=xyz_dms_cust_100;username-hadoop;password=hadoop' 
--table e_purchase_category 
--hive_import 
--delete-target-dir 
--hive-table purchase_category_p 
--hive-partition-key "creation_date" 
--hive-partition-value "2015-02-02"

分区表已存在。

1bqhqjot

1bqhqjot1#

配置单元分区密钥( creation_date 在您的示例中,当您使用 hive-import . 当您试图用分区在配置单元中创建表时,您将不会在表架构中包含分区列。这同样适用于sqoop hive-import 也。
根据你的sqoop命令,我猜 creation_date 列存在于sqlserver表中。如果是,您可能会遇到此错误

ERROR tool.ImportTool: Imported Failed: 
Partition key creation_date cannot be a column to import.

为了解决这个问题,我有两个解决方案:
确保分区列不在sqlserver表中。所以,当sqoop创建配置单元表时,它包含分区列及其值作为配置单元仓库中的目录。
更改sqoop命令,包括一个自由形式查询,以获取除partiton列和do hive import之外的所有列。下面是这个解决方案的一个例子
例子:

sqoop import 
--connect jdbc:mysql://localhost:3306/hadoopexamples 
--query 'select City.ID, City.Name, City.District, City.Population from City where $CONDITIONS' 
--target-dir /user/XXXX/City
--delete-target-dir 
--hive-import 
--hive-table City
--hive-partition-key "CountryCode" 
--hive-partition-value "USA" 
--fields-terminated-by ',' 
-m 1

另一种方法:您也可以尝试按不同步骤执行任务:
在配置单元中创建分区表(示例:city\u partition)
使用配置单元导入将数据从rdbms加载到普通配置单元表(示例:city)
使用insert overwrite,将数据从普通配置单元表(city)导入分区表(city\u partition),如下所示: INSERT OVERWRITE TABLE city_partition PARTITION (CountryCode='USA') SELECT id, name, district, population FROM city;

1wnzp6jl

1wnzp6jl2#

它也可以应用于:

sqoop import --connect jdbc:mysql://localhost/akash
--username root
--P
--table mytest
--where "dob='2019-12-28'"
--columns "id,name,salary"
--target-dir /user/cloudera/
--m 1 --hive-table mytest
--hive-import
--hive-overwrite
--hive-partition-key dob
--hive-partition-value '2019-12-28'

相关问题