2013-05-17 11 views
11

Znalazłem błąd/błąd w bigquery. Dostaliśmy stolik na podstawie danych Banku Statistics ramach celu starschema.net:clouddb:bank.Banks_tokenBigQuery COUNT (wartość DISTINCT) vs COUNT (wartość)

Jeżeli uruchomić następujące zapytanie:

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

i uzyskać następujący wynik:

Row totalrow bankidcnt  
1 9513 9903  

Moim problemem jest to, że jeśli mam 9513row, jak mogę uzyskać 9903row, który jest 390row większy niż liczba wierszy w tabeli.

Odpowiedz

21

W BigQuery COUNT DISTINCT jest przybliżenie statystyczne dla wszystkich wyników większa niż 1000.

Możesz podać opcjonalny drugi argument, aby dać próg, przy którym używane są przybliżone. Więc jeśli użyjesz w swoim przykładzie COUNT (DISTINCT BankId, 10000), powinieneś zobaczyć dokładny wynik (ponieważ rzeczywista liczba wierszy jest mniejsza niż 10000). Należy jednak pamiętać, że użycie większego progu może być kosztowne pod względem wydajności.

Zobacz pełną dokumentację tutaj: https://developers.google.com/bigquery/docs/query-reference#aggfunctions


UPDATE 2017:

Dzięki BigQuery #standardSQL COUNT(DISTINCT) jest zawsze dokładna. Aby uzyskać przybliżone wyniki, należy użyć APPROX_COUNT_DISTINCT(). Dlaczego ktoś miałby używać przybliżonych wyników? See this article.

20

Użyłem EXACT_COUNT_DISTINCT() jako sposobu na uzyskanie dokładnej liczby unikalnych. To czystsze i bardziej ogólne niż count (wartości różne, n> NumRows)

znaleźć tutaj: https://cloud.google.com/bigquery/query-reference#aggfunctions

+0

EXACT_COUNT_DISTINCT() wydaje się, że to tylko część Legacy SQL (https://cloud.google.com/ bigquery/docs/reference/legacy-sql). Proszę również przejrzeć notatki Steve'a Ganem na dole tego postu: https://stackoverflow.com/questions/45840341/firebase-bigquery-monthly-event-counts/45850267#45850267 – Dirk