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
Lepaskan: 2025-01-12 06:09:46
asal
378 orang telah melayarinya

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>
Salin selepas log masuk

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>
Salin selepas log masuk

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>
Salin selepas log masuk

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>
Salin selepas log masuk

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!

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