Maison > base de données > tutoriel mysql > Pourquoi ma ruche « COUNT(*) » augmente-t-elle après le filtrage des valeurs non nulles ?

Pourquoi ma ruche « COUNT(*) » augmente-t-elle après le filtrage des valeurs non nulles ?

DDD
Libérer: 2025-01-12 10:55:44
original
383 Les gens l'ont consulté

Why Does My Hive `COUNT(*)` Increase After Filtering for Non-Null Values?

*`COUNT()` de Hive donne des résultats inattendus après filtrage**

Utiliser la fonction COUNT(*) de Hive peut parfois produire des résultats surprenants. Considérons une table, "mytable", avec une colonne "master_id".

Une requête de décompte initiale révèle 1 129 563 lignes :

<code class="language-sql">SELECT COUNT(*) AS c FROM mytable;</code>
Copier après la connexion

Cependant, le filtrage des valeurs "master_id" non nulles augmente de manière inattendue le nombre à 1 134 041 :

<code class="language-sql">SELECT COUNT(*) AS c FROM mytable WHERE master_id IS NOT NULL;</code>
Copier après la connexion

C'est déroutant, d'autant plus qu'une requête vérifiant les valeurs nulles de "master_id" renvoie zéro :

<code class="language-sql">SELECT COUNT(*) AS c FROM mytable WHERE master_id IS NULL;</code>
Copier après la connexion

La raison derrière l'écart

Cette incohérence provient de la dépendance de Hive aux statistiques de table pour l'optimisation des requêtes. La requête COUNT(*) initiale, dépourvue de clause WHERE, peut utiliser des statistiques estimées au lieu d'une analyse complète de la table. L'ajout de la clause WHERE force une analyse complète de la table, conduisant à un nombre de lignes précis et plus élevé.

Comment obtenir des décomptes précis

Pour garantir des résultats précis, envisagez ces solutions :

  1. Désactiver l'optimisation basée sur les statistiques : Empêcher Hive d'utiliser les statistiques pour l'optimisation des requêtes :

    <code class="language-sql">SET hive.compute.query.using.stats=false;</code>
    Copier après la connexion
  2. Mettre à jour manuellement les statistiques du tableau : Utilisez la commande ANALYZE TABLE pour actualiser les statistiques du tableau :

    <code class="language-sql">ANALYZE TABLE mytable COMPUTE STATISTICS;</code>
    Copier après la connexion
  3. Activer la collecte automatique de statistiques : Configurez Hive pour mettre à jour automatiquement les statistiques lors des INSERT OVERWRITE opérations :

    <code class="language-sql">SET hive.stats.autogather=true;</code>
    Copier après la connexion

En mettant en œuvre l'une de ces méthodes, vous pouvez vous assurer que vos COUNT(*) requêtes renvoient systématiquement un nombre de lignes précis.

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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal