Rumah > pangkalan data > tutorial mysql > Mengapa `COUNT(*)` Hive dengan Keadaan Bukan Null Mengembalikan Kiraan Lebih Tinggi Daripada `COUNT(*)` Sederhana?

Mengapa `COUNT(*)` Hive dengan Keadaan Bukan Null Mengembalikan Kiraan Lebih Tinggi Daripada `COUNT(*)` Sederhana?

Mary-Kate Olsen
Lepaskan: 2025-01-12 06:59:46
asal
261 orang telah melayarinya

Why Does a Hive `COUNT(*)` with a Non-Null Condition Return a Higher Count Than a Simple `COUNT(*)`?

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

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

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

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

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!

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