我想使用 sqoop 导入作业将数据 sqoop 到 hive 列分区表中。我们应该怎么做?
Posted
技术标签:
【中文标题】我想使用 sqoop 导入作业将数据 sqoop 到 hive 列分区表中。我们应该怎么做?【英文标题】:I want to sqoop data using sqoop import job into hive column partitioned table. How can we do this? 【发布时间】:2017-08-26 12:34:31 【问题描述】:我有一个按国家列分区的配置单元表。 我的 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,XXXXXXXXX,XXXXXXXXX,6303 Heather Plaza,Brownsville,TX,69696,2017-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";
Hive 分区表:
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/';
sqoop导入hdfs文件夹后输出文件包含如下格式的数据:
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.
这是因为hive表列的分区方式与普通的RDBMS表列的排列方式不同。
我们如何解决这个问题。我想将 sqoop 数据直接导入 hive 分区表,并且在我运行这个 sqoop 作业时需要更新记录。如果我错了,有没有其他方法可以做到这一点?
还有如何使用两个或多个 hive 分区列来执行相同的操作。
【问题讨论】:
【参考方案1】:您需要添加--hive-partition-value
参数。分区值必须是字符串。
由于您使用的是sqoop job --create
,因此不需要--last-value 0
。请删除它。
【讨论】:
有没有办法将动态数据导入分区列而不是给出值?还应该有 RDBMS 列序列,并且配置单元列分区应该相同。请解释一下。 是的,这里是参考community.hortonworks.com/questions/43982/…以上是关于我想使用 sqoop 导入作业将数据 sqoop 到 hive 列分区表中。我们应该怎么做?的主要内容,如果未能解决你的问题,请参考以下文章
Sqoop 导入映射器失败,但 sqoop 作业显示正在运行
通过 oozie 从 sqoop 作业增量导入不会更新 sqoop 元存储中的 incremental.last.value