Maison >base de données >tutoriel mysql >Pourquoi l'ajout d'une clause « WHERE master_id IS NOT NULL » augmente-t-il le « COUNT(*) » dans Hive ?
Exception du nombre de ruches : la clause WHERE entraîne une augmentation du nombre
Lors de l'exploration des données Hive, un phénomène étrange a été observé. En comptant à l’aide de la simple instruction select count(*) as c from mytable
, le résultat est 1 129 563. Cependant, l’ajout du filtre select count(*) as c from mytable where master_id is not null
a augmenté de manière inattendue le nombre à 1 134 041.
Une enquête plus approfondie a révélé que la colonne master_id
contenait toujours des valeurs non nulles. Cela nous amène à une question : comment expliquer que la mise en œuvre de la condition d’exclusion des valeurs nulles augmente réellement le nombre de lignes ?
Explication possible : statistiques de la ruche
La réponse réside dans la compréhension de l'impact des statistiques Hive. Par défaut, Hive utilise des statistiques pour optimiser les requêtes et améliorer les performances. Lors de l'exécution d'une requête select count(*) as c from mytable
(sans aucun filtrage), Hive peut s'appuyer sur les statistiques stockées pour estimer le nombre. Cependant, ces statistiques ne sont pas toujours exactes ou à jour.
Dans ce cas, les statistiques peuvent indiquer que de nombreuses lignes dans la colonne master_id
contiennent des valeurs nulles. Lors de l'ajout du filtre master_id is not null
, Hive a réévalué les statistiques et a reconnu que la plupart des lignes contenaient des valeurs non nulles. Cela permet d'obtenir un décompte plus précis, éliminant les écarts notables.
Méthodes pour résoudre le problème
Pour obtenir un décompte précis, notamment lorsque vous travaillez avec des tableaux qui ont été considérablement modifiés ou qui n'ont pas été analysés récemment, il est recommandé :
hive.compute.query.using.stats=false
pour empêcher Hive d'utiliser les statistiques et forcer une analyse complète de la table. ANALYZE TABLE
pour mettre à jour manuellement les statistiques du tableau et garantir leur exactitude. hive.stats.autogather=true
pour collecter automatiquement des statistiques lors d'opérations de données telles que INSERT OVERWRITE
. 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!