错误无法识别的参数--hive-partition-key

时间:2015-07-27 01:45:18

标签: hadoop import hive sqoop

当我运行以下语句时,我收到错误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"

分区表存在。

2 个答案:

答案 0 :(得分:1)

当您使用creation_date时,

Hive分区键(示例中为hive-import)不应该是数据库表的一部分。当您尝试使用分区在hive中创建表时,您不会在表模式中包含分区列。这同样适用于sqoop hive-import

根据你的sqoop命令,我猜你的SQLServer表中存在creation_date列。如果是,您可能会收到此错误

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

要解决此问题,我有两个解决方案:

  1. 确保SQLServer表中不存在分区列。因此,当sqoop创建hive表时,它将该分区列及其值作为hive仓库中的目录。
  2. 通过包含自由格式查询来更改sqoop命令,以获取所有列所需的partiton列并执行hive-import。以下是此解决方案的示例
  3. 示例:

    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
    

    另一种方法: 您还可以尝试以不同的步骤执行任务:

    1. 在配置单元中创建分区表(例如:city_partition)
    2. 使用hive-import将数据从RDBMS加载到sqoop到普通的hive表(例如:city)
    3. 使用insert overwrite,将数据从纯hive表(city)导入分区表(city_partition),如:
    4. INSERT OVERWRITE TABLE city_partition PARTITION (CountryCode='USA') SELECT id, name, district, population FROM city;

答案 1 :(得分:0)

它也可以应用:

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'