count(*)
は、既存のデータファイルを新しいファイルに置き換えた後、異なる数のレコードを含む外部テーブルのHDFSロケーションに格納されます。Hive外部テーブル - 基礎となるデータファイルを異なる数のレコードを含む新しいファイルに置き換えた後、正しいカウントを与えない
この値を更新する方法はありますか?または、構成可能な時間が経過した後に自動的にリフレッシュされますか?
count(*)
は、既存のデータファイルを新しいファイルに置き換えた後、異なる数のレコードを含む外部テーブルのHDFSロケーションに格納されます。Hive外部テーブル - 基礎となるデータファイルを異なる数のレコードを含む新しいファイルに置き換えた後、正しいカウントを与えない
この値を更新する方法はありますか?または、構成可能な時間が経過した後に自動的にリフレッシュされますか?
Hiveは、行数を含むいくつかのテーブル統計情報のキャッシュを保持します。 ANALYZE TABLE tablename COMPUTE STATISTICS
を実行してこれらのキャッシュされた統計情報を更新し、クエリを再度実行してください。詳細は、Statistics in Hiveを参照してください。
ありがとうゾルタン。以前の観測:初めてMRジョブが実行されたカウント(*)を実行した後、データファイルを置き換えました。その後、MRジョブが実行されなかったカウント(*)を実行し、おそらくメタストアまたはキャッシュからカウント(古い値)が返されました。現在の観測:データファイルの置き換え後もcount(*)を実行するたびに、MRジョブが実行され、正しい結果が得られます。どうしてか分かりません。 – Marco99
完璧!長い間、私は再び同じ種類の問題を乗り越えました。 これはシーケンスです: 1.ハイブ外部テーブルに既にレコードがありました。 2.それぞれのhdfsテーブルからデータを削除しました。 3.カウント(*)クエリを実行しました。 4.データファイルを削除する前に利用可能なレコード数が示されました。 5.今度はあなたが提案したコマンドを実行しました。結果はゼロで、正しい結果が得られました。ありがとう。 – Marco99
テーブルは分割されていますか? また、テーブルが指している場所を確認し、次のコマンドを使用して同じことを確認します。 "show create table" –
Nanda
@Nanda:いいえ、分割されていません。しかし、「選択」は最新のレコードを提供します。 "show create table"は正しい場所を示します。 – Marco99