2016-05-26 7 views
0

TezでHive v1.2.1を使用しています。私は外部のパーティションテーブルを持っています。パーティションは毎時であり、p = yyyy_mm_dd_hhの形式です。状況は、hdfs内のこれらのパーティションディレクトリがいつか削除される可能性があるということです。それらが削除された後も、ハイブにはそのパーティションのメタデータが含まれており、 'show partitions'コマンドはhdfsからディレクトリが削除されたパーティションを表示します。通常、これはすべての問題を引き起こす可能性はない、と(そのディレクトリが削除された)パーティションの選択クエリは、単に空の結果をもたらすであろう:パーティションディレクトリが存在しない場合、集計クエリがハイブで失敗する

しかし
hive> select * from test_tab where p='2015_01_01_01'; 
OK 
Time taken: 2.168 seconds 

、同じパーティションに対して任意の集計クエリを実行している上、

hive> select count(*) from test_tab where p='2015_01_01_01'; 
FAILED: SemanticException java.io.FileNotFoundException: File hdfs://localhost:8020/user/root/data/test_db/test_tab/p=2015_01_01_01 does not exist. 

他の選択クエリの集計クエリと同じ動作が必要です。おそらくハイブのバグでしょう。すべての回避策 - この問題のヒントは高く評価されます。宜しくお願いします。

+0

を実行しますフォルダを削除します。 – 54l3d

+0

_Hiveは、パーティションのパーティションディレクトリが存在しないか、またはファイルが存在しない場合には気にしません。いずれの場合も、パーティションをフィルタリングするクエリに対しては結果が得られません。 - Programming Hiveから引用:[link](https://www.safaribooksonline.com/library/view/programming-hive/9781449326944/ch04 .html)。 Hiveがパーティションディレクトリが存在するかどうかを気にする必要がない場合、なぜaggクエリのエラーですか?これでバグだと思うのです –

答えて

0

、コマンド以下の実行

msck repair table test_tab;

と通常の動作では、ユーザーが前にパーティションをドロップする必要があるため、HCatで作業する場合、私はこの動作をencountredていると私はそのないバグを考えるクエリ

+0

これで、HDFS上の手動で削除されたファイルを指すパーティションは削除されません。手動で作成したパーティションフォルダをHiveメタストアに追加するだけです。 – cheseaux

関連する問題