Rumah >pangkalan data >tutorial mysql >Mengapa `COUNT(*)` Hive dengan Keadaan Bukan Null Mengembalikan Kiraan Lebih Tinggi Daripada `COUNT(*)` Sederhana?
*Pengecualian kiraan sarang (): PILIH dengan syarat bukan nol mengembalikan kiraan yang lebih tinggi**
Dalam Hive, gelagat istimewa telah diperhatikan: kiraan baris dengan keadaan tidak kosong mengembalikan nilai yang lebih tinggi daripada kiraan semua baris. Mari kita siasat anomali ini.
Jadual bernama "mytable" mengandungi medan bernama "master_id". Menggunakan fungsi count(*), kita dapat:
<code class="language-sql">select count(*) as c from mytable; c 1129563</code>
Namun, apabila menambah syarat untuk mengira hanya nilai bukan nol "master_id", kami mendapat kiraan yang lebih besar:
<code class="language-sql">select count(*) as c from mytable where master_id is not null; c 1134041</code>
Anehnya, pertanyaan berasingan menunjukkan bahawa "master_id" tidak mempunyai nilai nol:
<code class="language-sql">select count(*) as c from mytable where master_id is null; c 0</code>
Mengapakah penambahan keadaan bukan nol menghasilkan kiraan yang lebih tinggi apabila tiada nilai nol?
Penjelasan yang paling mungkin terletak pada statistik penggunaan Hive. Secara lalai, Hive menggunakan statistik untuk mengoptimumkan perancangan pertanyaan dengan menganggarkan bilangan baris. Walau bagaimanapun, statistik ini tidak selalunya tepat.
Untuk menyelesaikan masalah ini, lumpuhkan penggunaan statistik dengan menetapkan parameter:
<code class="language-sql">set hive.compute.query.using.stats=false;</code>
Melaksanakan semula pertanyaan kini seharusnya menghasilkan hasil yang konsisten.
Sebagai alternatif, anda boleh mengira statistik secara manual menggunakan sintaks ANALYZE TABLE.
Selain itu, tetapan hive.stats.autogather=true
akan mengumpulkan statistik secara automatik semasa operasi INSERT OVERWRITE
, memastikan statistik yang lebih tepat dan mencegah anomali tersebut.
Atas ialah kandungan terperinci Mengapa `COUNT(*)` Hive dengan Keadaan Bukan Null Mengembalikan Kiraan Lebih Tinggi Daripada `COUNT(*)` Sederhana?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!