ホームページ > データベース > mysql チュートリアル > 「WHERE master_id IS NOT NULL」句を追加すると、Hive の「COUNT(*)」が増加するのはなぜですか?

「WHERE master_id IS NOT NULL」句を追加すると、Hive の「COUNT(*)」が増加するのはなぜですか?

Linda Hamilton
リリース: 2025-01-12 06:27:45
オリジナル
317 人が閲覧しました

Why Does Adding a `WHERE master_id IS NOT NULL` Clause Increase the `COUNT(*)` in Hive?

ハイブ カウント例外: WHERE 句によりカウントが増加します

Hive データの探索中に、奇妙な現象が観察されました。単純なステートメント select count(*) as c from mytable を使用してカウントすると、結果は 1,129,563 になります。ただし、フィルター select count(*) as c from mytable where master_id is not null を追加すると、カウントが予期せず 1,134,041 に増加しました。

さらなる調査により、master_id 列には常に null 以外の値が含まれていることが判明しました。ここで、NULL 値除外条件の実装によって実際に行数が増加することをどのように説明すればよいでしょうか?という疑問が生じます。

考えられる説明: Hive 統計

答えは、Hive 統計の影響を理解することにあります。デフォルトでは、Hive は統計を利用してクエリを最適化し、パフォーマンスを向上させます。 select count(*) as c from mytable クエリを (フィルタリングなしで) 実行する場合、Hive は保存された統計に基づいてカウントを推定することがあります。ただし、これらの統計は常に正確または最新であるとは限りません。

この場合、統計は master_id 列に null 値を含む行が多数あることを示している可能性があります。フィルター master_id is not null を追加すると、Hive は統計を再評価し、ほとんどの行に null 以外の値が含まれていることを認識しました。これにより、カウントがより正確になり、顕著な不一致が排除されます。

問題を解決する方法

特に大幅に変更されたテーブルや最近分析されていないテーブルを操作する場合に、正確な数を取得するには、次のことをお勧めします。

  • 統計を無効にする: Hive が統計を使用しないようにし、テーブル全体のスキャンを強制するには、hive.compute.query.using.stats=false を設定します。
  • 統計の収集: ANALYZE TABLE コマンドを使用してテーブル統計を手動で更新し、その精度を確保します。
  • 自動統計収集を有効にする: hive.stats.autogather=true などのデータ操作中に統計を自動的に収集するには、INSERT OVERWRITE を設定します。

以上が「WHERE master_id IS NOT NULL」句を追加すると、Hive の「COUNT(*)」が増加するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート