Rumah > pangkalan data > tutorial mysql > Mengapa Menambah Klausa `WHERE master_id IS NOT NULL` Meningkatkan `COUNT(*)` dalam Hive?

Mengapa Menambah Klausa `WHERE master_id IS NOT NULL` Meningkatkan `COUNT(*)` dalam Hive?

Linda Hamilton
Lepaskan: 2025-01-12 06:27:45
asal
362 orang telah melayarinya

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

Pengecualian hive count: WHERE klausa menyebabkan kiraan meningkat

Semasa penerokaan data Hive, fenomena aneh telah diperhatikan. Apabila mengira menggunakan pernyataan ringkas select count(*) as c from mytable, hasilnya ialah 1,129,563. Walau bagaimanapun, penambahan penapis select count(*) as c from mytable where master_id is not null secara tidak dijangka meningkatkan kiraan kepada 1,134,041.

Siasatan lanjut mendedahkan bahawa lajur master_id sentiasa mengandungi nilai bukan nol. Ini membawa kepada soalan: Bagaimana untuk menerangkan bahawa pelaksanaan syarat pengecualian nilai nol sebenarnya meningkatkan bilangan baris?

Penjelasan yang mungkin: Statistik sarang

Jawapannya terletak pada memahami kesan statistik Hive. Secara lalai, Hive menggunakan statistik untuk mengoptimumkan pertanyaan dan meningkatkan prestasi. Apabila melaksanakan pertanyaan select count(*) as c from mytable (tanpa sebarang penapisan), Hive mungkin bergantung pada statistik yang disimpan untuk menganggarkan kiraan. Walau bagaimanapun, statistik ini tidak selalunya tepat atau terkini.

Dalam kes ini, statistik mungkin menunjukkan bahawa terdapat banyak baris dalam lajur master_id yang mengandungi nilai nol. Apabila menambahkan penapis master_id is not null, Hive menilai semula statistik dan mengiktiraf bahawa kebanyakan baris mengandungi nilai bukan nol. Ini menghasilkan kiraan yang lebih tepat, menghapuskan percanggahan yang ketara.

Kaedah untuk menyelesaikan masalah

Untuk mendapatkan kiraan yang tepat, terutamanya apabila bekerja dengan jadual yang telah diubah dengan ketara atau belum dianalisis baru-baru ini, adalah disyorkan:

  • Lumpuhkan statistik: Tetapkan hive.compute.query.using.stats=false untuk menghalang Hive daripada menggunakan statistik dan memaksa imbasan jadual penuh.
  • Kumpul statistik: Gunakan perintah ANALYZE TABLE untuk mengemas kini statistik jadual secara manual dan memastikan ketepatannya.
  • Dayakan pengumpulan statistik automatik: Tetapkan hive.stats.autogather=true untuk mengumpul statistik secara automatik semasa operasi data seperti INSERT OVERWRITE.

Atas ialah kandungan terperinci Mengapa Menambah Klausa `WHERE master_id IS NOT NULL` Meningkatkan `COUNT(*)` dalam Hive?. 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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan