2016-09-20 4 views
1

count(*)は、既存のデータファイルを新しいファイルに置き換えた後、異なる数のレコードを含む外部テーブルのHDFSロケーションに格納されます。Hive外部テーブル - 基礎となるデータファイルを異なる数のレコードを含む新しいファイルに置き換えた後、正しいカウントを与えない

この値を更新する方法はありますか?または、構成可能な時間が経過した後に自動的にリフレッシュされますか?

+0

テーブルは分割されていますか? また、テーブルが指している場所を確認し、次のコマンドを使用して同じことを確認します。 "show create table " – Nanda

+0

@Nanda:いいえ、分割されていません。しかし、「選択」は最新のレコードを提供します。 "show create table"は正しい場所を示します。 – Marco99

答えて

2

Hiveは、行数を含むいくつかのテーブル統計情報のキャッシュを保持します。 ANALYZE TABLE tablename COMPUTE STATISTICSを実行してこれらのキャッシュされた統計情報を更新し、クエリを再度実行してください。詳細は、Statistics in Hiveを参照してください。

+0

ありがとうゾルタン。以前の観測:初めてMRジョブが実行されたカウント(*)を実行した後、データファイルを置き換えました。その後、MRジョブが実行されなかったカウント(*)を実行し、おそらくメタストアまたはキャッシュからカウント(古い値)が返されました。現在の観測:データファイルの置き換え後もcount(*)を実行するたびに、MRジョブが実行され、正しい結果が得られます。どうしてか分かりません。 – Marco99

+0

完璧!長い間、私は再び同じ種類の問題を乗り越えました。 これはシーケンスです: 1.ハイブ外部テーブルに既にレコードがありました。 2.それぞれのhdfsテーブルからデータを削除しました。 3.カウント(*)クエリを実行しました。 4.データファイルを削除する前に利用可能なレコード数が示されました。 5.今度はあなたが提案したコマンドを実行しました。結果はゼロで、正しい結果が得られました。ありがとう。 – Marco99

関連する問題