0

「sqoopcreate-hive-table」を使用してHiveでテーブルスキーマを作成したいと思います。私のDBはOracleDatabase10g Enterprise Edition 10.2.0.4.0であり、sqoop-1.2.0-cdh3u0とhive-0.7.0-cdh3u0を使用しています。後でHiveテーブルにロードするデータはすでにHDFSにあります。手動で作成して後でデータをロードするよりも、sqoop&hiveによってテーブルメタデータを自動的に作成する方がよいでしょう。

これが私が実行するコマンドです:

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

そして、私は次のエラーを受け取ります:

11/05/12 11:33:11 INFO hive.HiveImport:アップロードされたデータをHiveにロードしています

11/05/12 11:33:12 INFO manager.OracleManager:タイムゾーンがGMTに設定されました11/05/12

11:33:12 INFO manager.SqlManager:SQLステートメントの実行:SELECTt。*FROM BFUNC1.R1_EVOLUTION t WHERE 1 = 0

11/05/12 11:33:14 INFO hive.HiveImport:Hive履歴ファイル= / tmp / edjatsay / hive_job_log_edjatsay_201105121133_1466429457.txt

11/05/12 11:33:14 INFO hive.HiveImport:FAILED:Parse Error:line 1:58不一致入力')'列指定に識別子が必要です

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

11/05/12 11:33:14エラーtool.CreateHiveTableTool:テーブル作成ジョブの実行中にIOExceptionが発生しました:java.io.IOException:Hiveがステータス11で終了しました

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)     

よろしくお願いします。

4

2 に答える 2

2

「--hive-import」オプションを使用してsqoopでテーブルの単一行をインポートすることで、最終的にこの問題を解決しました。これは私が使用したコマンドです:

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

次に、以前にインポートした単一の行を削除し、HDFS に既にあったデータを手動でロードしました。これの目的は、Hive がメタデータを自動的に推測して作成できるようにすることでした。全体的なプロセスを汎用スクリプトで実行できるようにします。

于 2011-05-23T08:34:13.860 に答える