*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 :
select count(*) as c from mytable; c 1129563
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 :
select count(*) as c from mytable where master_id is not null; c 1134041
Étonnamment, une requête distincte montre que « master_id » n'a pas de valeurs nulles :
select count(*) as c from mytable where master_id is null; c 0
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 :
set hive.compute.query.using.stats=false;
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!