ホームページ >データベース >mysql チュートリアル >Null 以外の条件を持つ Hive `COUNT(*)` が単純な `COUNT(*)` よりも高いカウントを返すのはなぜですか?

Null 以外の条件を持つ Hive `COUNT(*)` が単純な `COUNT(*)` よりも高いカウントを返すのはなぜですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2025-01-12 06:59:46263ブラウズ

Why Does a Hive `COUNT(*)` with a Non-Null Condition Return a Higher Count Than a Simple `COUNT(*)`?

*ハイブ カウント () 例外: null 以外の条件を指定した SELECT はより高いカウントを返します**

Hive では、空ではない条件の行数がすべての行数よりも高い値を返すという特別な動作が観察されました。この異常を調査しましょう。

「mytable」という名前のテーブルには、「master_id」という名前のフィールドが含まれています。 count(*) 関数を使用すると、次の結果が得られます:

<code class="language-sql">select count(*) as c from mytable;
c
1129563</code>

ただし、「master_id」の非 null 値のみをカウントする条件を追加すると、はるかに大きなカウントが得られます。

<code class="language-sql">select count(*) as c from mytable where master_id is not null;
c
1134041</code>

驚くべきことに、別のクエリでは、「master_id」に null 値がないことが示されています。

<code class="language-sql">select count(*) as c from mytable where master_id is null;
c
0</code>

Null 値がない場合に、Null 以外の条件を追加するとカウントが増加するのはなぜですか?

最も可能性の高い説明は、Hive の使用統計にあります。デフォルトでは、Hive は統計を使用して行数を推定し、クエリ計画を最適化します。ただし、これらの統計は常に正確であるとは限りません。

この問題を解決するには、パラメータを設定して統計の使用を無効にします:

<code class="language-sql">set hive.compute.query.using.stats=false;</code>

クエリを再実行すると、一貫した結果が得られるはずです。

または、ANALYZE TABLE 構文を使用して統計を手動で計算することもできます。

さらに、hive.stats.autogather=true を設定すると、INSERT OVERWRITE 操作中に統計が自動的に収集され、より正確な統計が保証され、そのような異常が防止されます。

以上がNull 以外の条件を持つ Hive `COUNT(*)` が単純な `COUNT(*)` よりも高いカウントを返すのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。