Question BigQuery COUNT (valeur DISTINCT) vs COUNT (valeur)


J'ai trouvé un problème / bug dans le bigquery. Nous avons un tableau basé sur les données statistiques de la Banque sous le starschema.net:clouddb:bank.Banks_token

Si je lance 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, qui est 390row plus que le nombre de lignes dans la table.


13
2018-05-17 12:36


origine


Réponses:


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

Vous pouvez fournir un second argument facultatif pour indiquer le seuil auquel les approximations sont utilisées. Donc, 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 exact Pour des résultats approximatifs, utilisez APPROX_COUNT_DISTINCT(). Pourquoi quelqu'un utiliserait-il des résultats approximatifs? Voir cet article.


24
2018-05-19 03:40



J'ai utilisé EXACT_COUNT_DISTINCT () pour obtenir le compte 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


21
2018-05-22 22:34