2013-05-17 4 views
11

Ich habe einen Fehler in bigquery gefunden. Wir bekamen einen Tisch auf Basis der Bank Statistik-Daten unter der starschema.net:clouddb:bank.Banks_tokenBigQuery COUNT (DISTINCT-Wert) vs COUNT (Wert)

Wenn ich die folgende Abfrage:

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

und ich bekomme folgendes Ergebnis:

Row totalrow bankidcnt  
1 9513 9903  

Mein Problem ist, dass, wenn ich 9513row habe, wie 9903row, die 390row mehr als die rowcount in der Tabelle ist.

Antwort

21

In BigQuery, COUNT DISTINCT ist eine statistische Annäherung für alle Ergebnisse von mehr als 1000

Sie können ein optionales zweites Argument liefern die Schwelle, bei der Annäherungen verwendet werden, zu geben. Wenn Sie COUNT (DISTINCT BankId, 10000) in Ihrem Beispiel verwenden, sollten Sie das genaue Ergebnis sehen (da die tatsächliche Anzahl der Zeilen weniger als 10000 ist). Beachten Sie jedoch, dass die Verwendung eines größeren Schwellenwerts in Bezug auf die Leistung kostspielig sein kann.

Siehe die vollständige Dokumentation hier: https://developers.google.com/bigquery/docs/query-reference#aggfunctions


UPDATE 2017:

Mit BigQuery #standardSQL COUNT(DISTINCT) immer exakt ist. Für ungefähre Ergebnisse verwenden Sie APPROX_COUNT_DISTINCT(). Warum sollte jemand ungefähr Ergebnisse verwenden? See this article.

20

Ich habe EXACT_COUNT_DISTINCT() als eine Möglichkeit verwendet, um die genaue eindeutige Anzahl zu erhalten. Es ist sauberer und allgemeiner als COUNT (DISTINCT Wert, n> numRows)

hier gefunden: https://cloud.google.com/bigquery/query-reference#aggfunctions

+0

Die EXACT_COUNT_DISTINCT(), wie es scheint, ist nur ein Teil von Legacy-SQL (https://cloud.google.com/ bigquery/docs/Referenz/Legacy-SQL). Bitte gehen Sie auch auf die Notizen von Steve Ganem am Ende dieses Beitrags: https://stackoverflow.com/questions/45840341/firebase-bigquery-monthly-event-counts/45850267#45850267 – Dirk