Rumah > pangkalan data > tutorial mysql > Mengapa `COUNT(*)` Hive Saya Meningkat Selepas Penapisan untuk Nilai Bukan Nol?

Mengapa `COUNT(*)` Hive Saya Meningkat Selepas Penapisan untuk Nilai Bukan Nol?

DDD
Lepaskan: 2025-01-12 10:55:44
asal
383 orang telah melayarinya

Why Does My Hive `COUNT(*)` Increase After Filtering for Non-Null Values?

*`COUNT()` Hive's Menghasilkan Keputusan Yang Tidak Dijangka Selepas Penapisan**

Menggunakan fungsi COUNT(*) Hive kadangkala boleh menghasilkan hasil yang mengejutkan. Pertimbangkan jadual, "mytable," dengan lajur "master_id."

Pertanyaan kiraan awal mendedahkan 1,129,563 baris:

<code class="language-sql">SELECT COUNT(*) AS c FROM mytable;</code>
Salin selepas log masuk

Walau bagaimanapun, penapisan untuk nilai "master_id" bukan nol secara tidak dijangka meningkatkan kiraan kepada 1,134,041:

<code class="language-sql">SELECT COUNT(*) AS c FROM mytable WHERE master_id IS NOT NULL;</code>
Salin selepas log masuk

Ini membingungkan, terutamanya kerana pertanyaan yang menyemak nilai "master_id" nol mengembalikan sifar:

<code class="language-sql">SELECT COUNT(*) AS c FROM mytable WHERE master_id IS NULL;</code>
Salin selepas log masuk

Punca Disebalik Percanggahan

Ketidakkonsistenan ini berpunca daripada pergantungan Hive pada statistik jadual untuk pengoptimuman pertanyaan. Pertanyaan COUNT(*) awal, tanpa klausa WHERE, mungkin menggunakan anggaran statistik dan bukannya imbasan jadual penuh. Menambah klausa WHERE memaksa imbasan jadual lengkap, membawa kepada kiraan baris yang tepat dan lebih tinggi.

Cara Mendapatkan Kiraan Tepat

Untuk menjamin hasil yang tepat, pertimbangkan penyelesaian berikut:

  1. Lumpuhkan Pengoptimuman Berasaskan Statistik: Halang Hive daripada menggunakan statistik untuk pengoptimuman pertanyaan:

    <code class="language-sql">SET hive.compute.query.using.stats=false;</code>
    Salin selepas log masuk
  2. Kemas Kini Statistik Jadual Secara Manual: Gunakan perintah ANALYZE TABLE untuk memuat semula statistik jadual:

    <code class="language-sql">ANALYZE TABLE mytable COMPUTE STATISTICS;</code>
    Salin selepas log masuk
  3. Dayakan Pengumpulan Statistik Automatik: Konfigurasikan Hive untuk mengemas kini statistik secara automatik semasa operasi INSERT OVERWRITE:

    <code class="language-sql">SET hive.stats.autogather=true;</code>
    Salin selepas log masuk

Dengan melaksanakan salah satu kaedah ini, anda boleh memastikan COUNT(*) pertanyaan anda secara konsisten mengembalikan kiraan baris yang tepat.

Atas ialah kandungan terperinci Mengapa `COUNT(*)` Hive Saya Meningkat Selepas Penapisan untuk Nilai Bukan Nol?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan