我想使用 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 作业显示正在运行

Sqoop 导入安全 hbase 失败

sqoop安装及使用

通过 oozie 从 sqoop 作业增量导入不会更新 sqoop 元存储中的 incremental.last.value

Sqoop 作业因 Oracle 导入的 KiteSDK 验证错误而失败

使用 sqoop 将数据从 CSV 导入 Avro 表的命令