2016-12-29 8 views
1

私は外部テーブルを作成し、豚スクリプトを使用して外部テーブルを読み込みたいと思っていました。私は以下のアプローチに従った:PIGからHIVE外部テーブルを使用してデータを書き込む


Ok。 HDFSディレクトリのどこかにスキーマレイアウトを持つ外部ハイブテーブルを作成します。できれば

このようなテーブルを作成して、そのディレクトリにファイルをロードする必要はありません。

今その先の場所と区切り文字と最終FOREACHのスキーマのレイアウトを確認してくださいあなたは

A = LOAD 'inputfile.txt' USING PigStorage(',') AS(id:int,name:chararray,city:chararray); 
B = FILTER A by id > = 678933; 
C = FOREACH B GENERATE id,name,city; 
STORE C INTO '/user/cloudera/outputfiles/usecase1' USING PigStorage('|'); 

以下のように、その豚のスクリプト使用の出力を保存するときに我々は、その後、いくつかの入力ディレクトリのデータを読み込み、豚のスクリプトを書きますあなたの文はHive DDLスキーマと一致します。


私の問題は、私は最初のテーブルを作成したとき、それはHDFS内のディレクトリを作成している、と私は、スクリプトを使用してファイルを保存しようとしたとき、それは「フォルダが既に存在する」というエラーがスローされます、です。豚の店は常に特定の名前だけで新しいディレクトリに書き込むように見えますか?

この問題を回避する方法はありますか?

また、毎回特定のdiretory /ファイルに書き込むためにPIGのSTOREコマンドで使用できる他の属性はありますか?

おかげ ラム

答えて

1

YES、あなたの結果を達成するためHCatalogを使用することができます。

pig -useHCatalog your_pig_script.pig 

たり、うなり声シェルを使用している場合は、単純に使用します:

pig -useHCatalog 

次に直接あなたの関係を保存するために、あなたの店のコマンドである

はあなたのようなあなたの豚のスクリプトを実行する必要が覚えていますハイブテーブルは次のものを使用します:

STORE C INTO 'HIVE_DATABASE.EXTERNAL_TABLE_NAME' USING org.apache.hive.hcatalog.pig.HCatStorer(); 
関連する問題