2011-05-12 4 views
0

Je souhaite créer un schéma de table dans Hive en utilisant "sqoop create-hive-table". Ma base de données est une base de données Oracle 10g Enterprise Edition 10.2.0.4.0, j'utilise sqoop-1.2.0-cdh3u0 et hive-0.7.0-cdh3u0. Les données à charger ensuite sur la table Hive sont déjà sur le HDFS, et je préférerais que les métadonnées de la table soient créées automatiquement par sqoop & plutôt que de le créer manuellement et de charger les données par la suite.Erreur lors de la création d'une table avec Sqoop

Voici la commande que j'Execute:

$ sqoop create-hive-table --connect jdbc:oracle:thin:@//dbserver:1521/masterdb 
     --username myuser --table DBFUNC1.R1_EVOLUTION 
     --fields-terminated-by ',' -P 

Et je reçois l'erreur suivante:

11/05/12 11:33:11 INFO hive.HiveImport: Loading uploaded data into Hive

11/05/12 11:33:12 INFO manager.OracleManager: Time zone has been set to GMT 11/05/12

11:33:12 INFO manager.SqlManager: Executing SQL statement: SELECT t.* FROM BFUNC1.R1_EVOLUTION t WHERE 1=0

11/05/12 11:33:14 INFO hive.HiveImport: Hive history file=/tmp/edjatsay/hive_job_log_edjatsay_201105121133_1466429457.txt

11/05/12 11:33:14 INFO hive.HiveImport: FAILED: Parse Error: line 1:58 mismatched input ')' expecting Identifier in column specification

11/05/12 11:33:14 INFO hive.HiveImport:

11/05/12 11:33:14 ERROR tool.CreateHiveTableTool: Encountered IOException running create table job: java.io.IOException: Hive exited with status 11

Voici le schéma de la table dans le DB:

SQL> describe BFUNC1.R1_EVOLUTION; 

OWNER_ID   NOT NULL NUMBER(38)  
AI_CODE   NOT NULL CHAR(3) 
TA_NUMBER   NOT NULL NUMBER(38) 
RULE    NOT NULL CHAR(4) 
F_CLASS   NOT NULL CHAR(8)  
EVOLUTION_ID  NOT NULL NUMBER(38) 
CREATION_MODIFID NUMBER(38) 
DISC_MODIFID  NUMBER(38) 

CREATION_DATETIME CHAR(19) 
ENDED_DATETIME  CHAR(19) 
EVOLUTION_STATE  CHAR(1)  

Merci d'avance pour votre aide.

Répondre

2

J'ai finalement résolu ce problème en important l'importation d'une seule ligne de ma table avec sqoop avec l'option "--hive-import". Ce est la commande je:

$ sqoop import --connect jdbc:oracle:thin:@//dbserver:1521/masterdb --username myuser --table DBFUNC1.R1_EVOLUTION --where 'rownum=1' --verbose -P 

Ensuite, je simplement supprimé la seule ligne importée précédemment et chargés manuellement les données que j'avais déjà HDFS. Le but de ceci était de laisser Hive deviner et créer les métadonnées automatiquement. Je commande pour être en mesure d'effectuer le processus global dans un script générique.

0

est inférieure à la requête d'importation Sqoop-je utiliser dans mon projet:

oracle_connection.txt aura les informations de connexion.

sqoop --options-file oracle_connection.txt \ 
--table $DATABASE.$TABLENAME \ 
-m $NUMMAPPERS \ 
--where "$CONDITION" \ 
--hive-import \ 
--map-column-hive "$COLLIST" \ 
--create-hive-table \ 
--hive-drop-import-delims \ 
--split-by $SPLITBYCOLUMN \ 
--hive-table $HIVEDATABASE.$TABLENAME \ 
--bindir sqoop_hive_rxhome/bindir/ \ 
--outdir sqoop_hive_rxhome/outdir 
Questions connexes