我在country列上划分了一个配置单元表。我的rdbms列如下:
id int, fname varchar(45), lname varchar(45), email varchar(45), password varchar(45), street varchar(45), city varchar(45), state varchar(45), zipcode varchar(45), c_time timestamp
样本数据:1,richard,hernandez,,,德克萨斯州布朗斯维尔希瑟广场6303号,696962017-07-20 20:24:17.0
sqoop作业:
sqoop job --create customer_partition -- import --connect jdbc:mysql://host/serverName
--username root -P --table customers --check-column c_time --incremental lastmodified
--last-value 0 --merge-key id --target-dir '/user/cloudera/partitionedTables/customers_partition/'
--fields-terminated-by ',' --hive-import
--hive-table customers_partition --hive-partition-key "state";
配置单元分区表:
create external table customers_partition(id int, fname varchar(64), lname varchar(64), email varchar(64),
password varchar(64), street varchar(45), city varchar(45), zipcode varchar(64), cob_dt timestamp)
partitioned by (state varchar(45))
row format delimited
fields terminated by ','
location '/hdfsPath/customers_partition/';
在hdfs文件夹中导入sqoop后,输出文件包含以下格式的数据:
1,Richard,Hernandez,XXXXXXXXX,XXXXXXXXX,6303 Heather Plaza,Brownsville,TX,69696,2017-07-20 20:24:17.0
which points to same columns same as RDBMS columns.
When I perform hive query: select * from customers_partition; showing 0 records found in hive.
这是因为分区导致的配置单元表列排列不同于正常的rdbms表列排列。
我们怎样才能解决这个问题。我希望sqoop将数据直接导入到配置单元分区表中,并且每次运行这个sqoop作业时都需要更新记录。如果我错了,还有别的办法吗?
以及如何使用两个或多个配置单元分区列执行相同的操作。
1条答案
按热度按时间guicsvcw1#
你需要加上
--hive-partition-value
论据。分区值必须是字符串。既然你用的是
sqoop job --create
--last-value 0
不需要。请把它取下来。