Perbezaan kiraan pertanyaan sarang: kiraan bukan kosong lebih besar daripada jumlah kiraan
Dalam Hive, kami memerhati fenomena menarik berkenaan pengiraan kiraan baris. Katakan terdapat jadual bernama mytable yang mengandungi medan bernama master_id. Apabila pertanyaan berikut dilaksanakan, jumlah bilangan baris yang diambil ialah 1,129,563:
<code class="language-sql">SELECT COUNT(*) AS c FROM mytable;</code>
Walau bagaimanapun, apabila membuat pertanyaan untuk bilangan baris dengan nilai master_id yang tidak kosong, kiraan meningkat kepada 1,134,041:
<code class="language-sql">SELECT COUNT(*) AS c FROM mytable WHERE master_id IS NOT NULL;</code>
Perbezaan ini berlaku kerana, secara lalai, pertanyaan tanpa klausa WHERE mungkin menggunakan statistik untuk menganggarkan bilangan baris. Untuk menyelesaikan masalah ini, parameter hive.compute.query.using.stats
boleh ditetapkan kepada palsu untuk melumpuhkan anggaran statistik.
Sebagai alternatif, anda boleh mengira statistik jadual secara eksplisit menggunakan pernyataan ANALYZE TABLE
atau tetapkan hive.stats.autogather
kepada benar untuk mengumpul statistik apabila pukal mengimport data melalui operasi INSERT TULISAN. Ini akan memastikan hasil pertanyaan yang tepat dan konsisten serta mengelakkan keputusan yang tidak dijangka seperti ini.
Atas ialah kandungan terperinci Mengapa Pertanyaan Hive COUNT(*) Saya Menunjukkan Lebih Sedikit Baris Daripada Pertanyaan Kiraan Bukan NULL Saya?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!