*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>
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>
É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>
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>
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!