Rumah >pangkalan data >tutorial mysql >Mengapa Pertanyaan Sarang Saya COUNT(*) Mengembalikan Kiraan Baris Berbeza Bergantung pada Klausa WHERE?

Mengapa Pertanyaan Sarang Saya COUNT(*) Mengembalikan Kiraan Baris Berbeza Bergantung pada Klausa WHERE?

Linda Hamilton
Linda Hamiltonasal
2025-01-12 06:09:46381semak imbas

Why Does My Hive COUNT(*) Query Return Different Row Counts Depending on the WHERE Clause?

*Hive COUNT() hasil pertanyaan berbeza-beza bergantung pada klausa WHERE**

Apabila menggunakan jadual Hive, anda mungkin menghadapi gelagat yang tidak dijangka apabila mengira baris dengan atau tanpa nilai nol. Perbezaan ini boleh dijelaskan oleh statistik pertanyaan.

Jika Hive mengesan kehadiran statistik pertanyaan dalam jadual, ia mungkin menggunakan maklumat ini untuk mengoptimumkan prestasi pertanyaan. Apabila anda melaksanakan pertanyaan tanpa klausa WHERE, contohnya:

<code class="language-sql">SELECT COUNT(*) AS c FROM mytable</code>

Hive boleh menggunakan statistik ini untuk menganggarkan bilangan baris dalam jadual tanpa benar-benar membaca data. Jika statistik tidak dikemas kini, ini boleh menyebabkan keputusan yang tidak tepat.

Sebaliknya, apabila anda menambah klausa WHERE dengan keadaan bukan nol, contohnya:

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

Hive akan dipaksa membaca data untuk menapis baris dengan nilai master_id kosong. Kiraan tepat ini mungkin lebih tinggi daripada anggaran berdasarkan maklumat statistik.

Untuk mengelakkan tingkah laku ini dan memastikan kiraan baris yang tepat, anda boleh melumpuhkan pengoptimuman pertanyaan berdasarkan statistik dengan menetapkan:

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

Sebagai alternatif, anda boleh menganalisis jadual secara eksplisit menggunakan arahan ANALYZE TABLE untuk mengemas kini statistik. Anda juga boleh menetapkan:

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

Ini akan mengumpul statistik secara automatik semasa operasi INSERT TULISAN, memastikannya dikemas kini dan mengurangkan perbezaan kiraan baris.

Atas ialah kandungan terperinci Mengapa Pertanyaan Sarang Saya COUNT(*) Mengembalikan Kiraan Baris Berbeza Bergantung pada Klausa WHERE?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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