2013-05-17 6 views
11

Ho trovato un problema tecnico/bug in bigquery. Abbiamo ottenuto un tavolo sulla base dei dati della Banca statistico sotto il starschema.net:clouddb:bank.Banks_tokenBigQuery COUNT (valore DISTINCT) vs COUNT (valore)

Se faccio funzionare la seguente query:

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

e ottengo il seguente risultato:

Row totalrow bankidcnt  
1 9513 9903  

Il mio problema è che se ho 9513row come posso ottenere 9903row, che è 390row più del conteggio delle righe nella tabella.

risposta

21

In BigQuery, COUNT DISTINCT è un'approssimazione statistica per tutti i risultati superiori a 1000.

È possibile fornire un secondo argomento opzionale per dare la soglia alla quale vengono utilizzati approssimazioni. Quindi, se si utilizza COUNT (DISTINCT BankId, 10000) nell'esempio, si dovrebbe vedere il risultato esatto (poiché la quantità effettiva di righe è inferiore a 10000). Si noti, tuttavia, che l'uso di una soglia più ampia può essere costoso in termini di prestazioni.

Vedere la documentazione completa qui: https://developers.google.com/bigquery/docs/query-reference#aggfunctions


UPDATE 2017:

Con BigQuery #standardSQL COUNT(DISTINCT) è sempre esatto. Per risultati approssimati usare APPROX_COUNT_DISTINCT(). Perché qualcuno dovrebbe usare risultati approssimativi? See this article.

20

Ho usato EXACT_COUNT_DISTINCT() come metodo per ottenere il conteggio univoco esatto. E 'più pulito e più generale di COUNT (valore distinto, n> numRows)

trovate qui: https://cloud.google.com/bigquery/query-reference#aggfunctions

+0

L'EXACT_COUNT_DISTINCT() sembra che è solo una parte della Legacy SQL (https://cloud.google.com/ BigQuery/docs/reference/legacy-SQL). Per favore, leggi anche le note di Steve Ganem in fondo a questo post: https://stackoverflow.com/questions/45840341/firebase-bigquery-monthly-event-counts/45850267#45850267 – Dirk