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无法实现。但是,我猜您可能不知道一种方法。
- 在没有任何分区的 Hive 中创建 table。
设置动态分区模式
SET hive.exec.dynamic.partition = true;
SET hive.exec.dynamic.partition.mode = nonstrict;
将数据导入未使用 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
创建另一个 table 分区
从之前的 table
覆盖到分区 table
INSERT OVERWRITE TABLE pd_partition partition(name) SELECT id, count, name from pd_withoutpartition;
注意:确保在 select 语句覆盖期间最后提到要分区的列。
蜂巢版本:蜂巢 1.1.0-cdh5.13.1
我在 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无法实现。但是,我猜您可能不知道一种方法。
- 在没有任何分区的 Hive 中创建 table。
设置动态分区模式
SET hive.exec.dynamic.partition = true; SET hive.exec.dynamic.partition.mode = nonstrict;
将数据导入未使用 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
创建另一个 table 分区
从之前的 table
覆盖到分区 tableINSERT OVERWRITE TABLE pd_partition partition(name) SELECT id, count, name from pd_withoutpartition;
注意:确保在 select 语句覆盖期间最后提到要分区的列。
蜂巢版本:蜂巢 1.1.0-cdh5.13.1