2017-12-20 21 views
1

OracleからHiveにデータを移動する必要があり、Sqoopが役に立つツールであることがわかりました。 問題は、クエリを処理し、結果をデスティネーションデータベースのテーブルに挿入する必要があることです。Sqoop with query clause

Oracle関数の結果 - > HiveDB.myTable

私は、このコマンドが見つかりました:

sqoop import --connect jdbc:oracle:thin:@******:1522/** 
--username myUsername --password pwd --query '...' 
--hive-import --split-by "myID" --hive-table "hive-table" --hive-database "hive-database" 

を私は--target-dir義務を指定する必要があり、私が書き込み権限を持っていませんHDFS。

これは、私が--tableを使用する場合、--target-dirを使用する必要がないため、--queryを使用する場合にのみ当てはまります。

クエリを使用して"--target-dir"プロパティを回避する方法があるかどうかは誰でも知っていますか?

+0

クエリオプションにtarget-dirを使用することは避けられません。 HDFSに書き込む権限がないと言うと、target-dirを無視するように選択したテーブルオプションでは、SQOOPはHDFSに書き込むのに対し、デフォルトの場所に書き込むため、これは当てはまりません。デフォルトの場所は、/ user/hive/warehouse//にあります。ターゲットディレクトリとしてこの場所を試してください。私はそこにデータが書き込まれると確信しています。 – Ramesh

+0

もう1つのオプションは--target-dirを必要としない "--where"オプションを使うことです。このオプションは、単一のテーブルからインポートする場合に機能します。 –

+0

@Ramesh --target-dir/user/hive/warehouse/<ハイブデータベース>/<ハイブテーブル名>を指定しようとしましたが、/ user/hive/warehouseフォルダを読み書きできません。 – gnobile

答えて

0

ハイブテーブル以外では、hcatalogテーブルを使用できますが、ターゲットディレクトリの場所を指定する必要があります。

0

データをインポートするにはHDFSに書き込みアクセス権が必要です。ほとんどの場合、hdfs:/// tmp /ディレクトリはすべてのユーザーに書き込みアクセス権を持っています。これをターゲットディレクトリとして使用し、コマンドを実行します。