2017-10-16 15 views
1

J'ai une table en oracle (nom de la table est TRCUS) avec les détails du client, partitionné basé sur l'année & mois. nom partitions Oracle: PERIOD_JAN_13, PERIOD_FEB_13, PERIOD_JAN_14, PERIOD_FEB_14 etcSqoop pour créer dynamiquement table hive partitionnée à partir d'oracle et importer des données

Maintenant, je veux importer les données de ce tableau dans HIVE en utilisant Sqoop directement.

Le travail Sqoop doit créer une table Hive, créer dynamiquement des partitions basées sur la partition Oracle Table, puis importer des données dans Hive; dans les partitions respectives. Comment cela peut-il être réalisé en utilisant SQOOP?

Répondre

2

Malheureusement, cela ne peut pas être réalisé avec Sqoop. Cependant, il existe une méthode que vous ne connaissez peut-être pas.

  1. Créez une table dans Hive sans partitions.
  2. Définir les modes de partition dynamique

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

  3. importer des données dans le tableau Hive non partitionné en utilisant Sqoop

    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. Créer une autre table avec des partitions

  5. Ecraser dans la table de partition m tableau précédent

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

Remarque: Assurez-vous que la colonne avec laquelle vous voulez partitionner est mentionné lors de la dernière Ecraser dans l'instruction select.

Hive Version: Ruche 1.1.0-cdh5.13.1