Maison > base de données > tutoriel mysql > Pourquoi une ruche `COUNT(*)` avec une condition non nulle renvoie-t-elle un nombre plus élevé qu'un simple `COUNT(*)` ?

Pourquoi une ruche `COUNT(*)` avec une condition non nulle renvoie-t-elle un nombre plus élevé qu'un simple `COUNT(*)` ?

Mary-Kate Olsen
Libérer: 2025-01-12 06:59:46
original
298 Les gens l'ont consulté

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

*Exception au nombre de ruches () : SELECT avec une condition non nulle renvoie un nombre plus élevé**

Dans Hive, un comportement particulier a été observé : le nombre de lignes avec une condition non vide renvoyait une valeur supérieure au nombre de toutes les lignes. Examinons cette anomalie.

La table nommée "mytable" contient un champ nommé "master_id". En utilisant la fonction count(*), on obtient :

<code class="language-sql">select count(*) as c from mytable;
c
1129563</code>
Copier après la connexion

Cependant, lors de l'ajout d'une condition pour ne compter que les valeurs non nulles de "master_id", nous obtenons un nombre beaucoup plus important :

<code class="language-sql">select count(*) as c from mytable where master_id is not null;
c
1134041</code>
Copier après la connexion

Étonnamment, une requête distincte montre que « master_id » n'a pas de valeurs nulles :

<code class="language-sql">select count(*) as c from mytable where master_id is null;
c
0</code>
Copier après la connexion

Pourquoi l'ajout d'une condition non nulle produit-il un nombre plus élevé lorsqu'il n'y a pas de valeurs nulles ?

L'explication la plus probable réside dans les statistiques d'utilisation de Hive. Par défaut, Hive utilise des statistiques pour optimiser la planification des requêtes en estimant le nombre de lignes. Cependant, ces statistiques ne sont pas toujours exactes.

Pour résoudre ce problème, désactivez l'utilisation des statistiques en définissant le paramètre :

<code class="language-sql">set hive.compute.query.using.stats=false;</code>
Copier après la connexion

La réexécution de la requête devrait maintenant produire des résultats cohérents.

Vous pouvez également calculer les statistiques manuellement en utilisant la syntaxe ANALYZE TABLE.

De plus, le réglage hive.stats.autogather=true collectera automatiquement des statistiques pendant les opérations INSERT OVERWRITE, garantissant des statistiques plus précises et évitant de telles anomalies.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal