Sqoop 从 Oracle 动态创建分区 table 的配置单元并导入数据

Sqoop to dynamically create hive partitioned table from oracle and import data

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

现在我想直接使用 SQOOP 将这个 table 的数据导入到 HIVE 中。

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

如何使用 SQOOP 实现这一点?

很遗憾,使用Sqoop无法实现。但是,我猜您可能不知道一种方法。

  1. 在没有任何分区的 Hive 中创建 table。
  2. 设置动态分区模式

    SET hive.exec.dynamic.partition = true; SET hive.exec.dynamic.partition.mode = nonstrict;

  3. 将数据导入未使用 Sqoop 分区的 Hive table

    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. 创建另一个 table 分区

  5. 从之前的 table

    覆盖到分区 table

    INSERT OVERWRITE TABLE pd_partition partition(name) SELECT id, count, name from pd_withoutpartition;

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

蜂巢版本:蜂巢 1.1.0-cdh5.13.1