web-dev-qa-db-fra.com

BigQuery COUNT (valeur DISTINCT) vs COUNT (valeur)

J'ai trouvé un bug/bug dans bigquery. Nous avons obtenu un tableau basé sur les données statistiques bancaires sous le starschema.net:clouddb:bank.Banks_token

Si j'exécute la requête suivante:

SELECT count(*) as totalrow,
count(DISTINCT BankId ) as bankidcnt
FROM bank.Banks_token;

Et j'obtiens le résultat suivant:

Row totalrow    bankidcnt    
1   9513    9903    

Mon problème est que si j'ai 9513row, comment pourrais-je obtenir 9903row, soit 390row de plus que le nombre de lignes dans le tableau.

20
Balazs Gunics

Dans BigQuery, COUNT DISTINCT est une approximation statistique pour tous les résultats supérieurs à 1000.

Vous pouvez fournir un deuxième argument facultatif pour indiquer le seuil auquel les approximations sont utilisées. Ainsi, si vous utilisez COUNT (DISTINCT BankId, 10000) dans votre exemple, vous devriez voir le résultat exact (car le nombre réel de lignes est inférieur à 10000). Notez cependant que l'utilisation d'un seuil plus élevé peut être coûteuse en termes de performances.

Voir la documentation complète ici: https://developers.google.com/bigquery/docs/query-reference#aggfunctions


MISE À JOUR 2017:

Avec BigQuery #standardSQL COUNT(DISTINCT) est toujours exacte. Pour des résultats approximatifs, utilisez APPROX_COUNT_DISTINCT(). Pourquoi utiliser des résultats approximatifs? Voir cet article .

33
Jeremy Condit

J'ai utilisé EXACT_COUNT_DISTINCT () comme moyen d'obtenir le nombre unique exact. C'est plus propre et plus général que COUNT (valeur DISTINCT, n> numRows)

Trouvé ici: https://cloud.google.com/bigquery/query-reference#aggfunctions

28
smntx