Sqoop从oracle动态创建hive分区表并导入数据

问题描述 投票:1回答:1

我在oracle中有一个表(表名是TRCUS),其中包含客户的详细信息,根据年份和月份进行分区。 Oracle中的分区名称:PERIOD_JAN_13,PERIOD_FEB_13,PERIOD_JAN_14,PERIOD_FEB_14等

现在我想直接使用SQOOP将此表的数据导入HIVE。

Sqoop作业应该创建一个hive表,根据oracle表分区动态创建分区,然后将数据导入hive;进入各自的分区。

如何使用SQOOP实现这一目标?

hadoop hive sqoop
1个回答
3
投票

不幸的是,使用Sqoop无法实现。但是,我猜你可能不知道有一种方法。

  1. 在Hive中创建一个没有任何分区的表。
  2. 设置动态分区模式 SET hive.exec.dynamic.partition = true; SET hive.exec.dynamic.partition.mode = nonstrict;
  3. 将数据导入到未使用Sqoop进行分区的Hive表中 sqoop import --connect "jdbc:mysql://quickstart.cloudera:3306/database1" --username root --password cloudera --query 'SELECT DISTINCT id, count from test WHERE $CONDITIONS' --target-dir /user/hive/warehouse/ --hive-table pd_withoutpartition --hive-database database1 --hive-import --hive-overwrite -m 1 --direct
  4. 使用分区创建另一个表
  5. 从上一个表覆盖到分区表 INSERT OVERWRITE TABLE pd_partition partition(name) SELECT id, count, name from pd_withoutpartition;

注意:确保在select语句中覆盖期间最后提到要分区的列。

Hive版本:Hive 1.1.0-cdh5.13.1

© www.soinside.com 2019 - 2024. All rights reserved.