2016-05-13 5 views
1

は、寄木細工のフォーマットのデータフレームストアを有し、以下のようなファイルシステム構造の1つ以上の列の値に基づいて、異なるファイル上に物理的に分配:作るために区分データのためのインパラテーブルスキーマを定義

|-region=Europe 
| |-processed=1 
| | |-part-r-00000-0515bd21-1cf1-40f1-885e-055a29284961.gz.parquet 
| |-processed=2 
| | |-part-r-00000-0515bd21-1cf1-40f1-885e-055a29284961.gz.parquet 
| |-processed=3 
| | |-part-r-00000-0515bd21-1cf1-40f1-885e-055a29284961.gz.parquet 
| |-processed=4 
|  |-part-r-00000-0515bd21-1cf1-40f1-885e-055a29284961.gz.parquet 
|-region=Asia 
| |-processed=2 
| | |-part-r-00000-0515bd21-1cf1-40f1-885e-055a29284961.gz.parquet 
| |-processed=4 
|  |-part-r-00000-0515bd21-1cf1-40f1-885e-055a29284961.gz.parquet 
|-region=America 
| |-processed=3 
|  |-part-r-00000-0515bd21-1cf1-40f1-885e-055a29284961.gz.parquet 
|-_SUCCESS 

私は手動で各パーティションを追加しているパーティションを認識してスキーマ:

ALTER TABLE status_log ADD PARTITION (region='Europe', processed="1") LOCATION '/hdfs/status_logs/region=Europe/processed=1'; 
ALTER TABLE status_log ADD PARTITION (region='Europe', processed="2") LOCATION '/hdfs/status_logs/region=Europe/processed=2'; 
ALTER TABLE status_log ADD PARTITION (region='Europe', processed="4") LOCATION '/hdfs/status_logs/region=Europe/processed=2'; 
... 
.. 
. 

は、インパラ、それは ツリーのディレクトリ構造を読み込み、自動的に分割されたスキーマを推測するようなテーブルスキーマを定義する方法はありますか? または、常に各パーティションをテーブルに自動的に追加する必要がありますか?

答えて

1

impalaが同じメタストアを共有しているので、ハイブを使用できますが、これは問題ではありません。私は、talbe status_logsの定義では、LOCATIONが '/ hdfs/status_logs'に設定されていると仮定します。

ハイブ発行コマンドで

msck repair table status_logs 

これは自動的にメタストアにすべてのパーティションを追加します。 その後、戻っインパラでは、あなたがする必要があるすべては、あなたがすべてのパーティションを見ることができました

invalidate metadata status_logs 

です。 あなたができることを確認する(これはおそらくすでに分かっている)。

show partitions status_logs 
関連する問題