2013-05-17 4 views
11

Я нашел ошибку/ошибку в bigquery. Мы получили таблицу на основе данных Банка Статистика по starschema.net:clouddb:bank.Banks_tokenBigQuery COUNT (значение DISTINCT) vs COUNT (значение)

Если я выполнить следующий запрос:

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

И я получаю следующий результат:

Row totalrow bankidcnt  
1 9513 9903  

Моя проблема в том, что если у меня есть 9513row, как я могу получить 9903row, что на 390 раз больше, чем строка в таблице.

ответ

21

В BigQuery, COUNT DISTINCT является статистической аппроксимации для всех результатов больше, чем 1000.

Вы можете предоставить необязательный второй аргумент, чтобы дать порог, при котором используются аппроксимации. Поэтому, если вы используете COUNT (DISTINCT BankId, 10000) в своем примере, вы должны увидеть точный результат (поскольку фактическое количество строк меньше 10000). Обратите внимание, однако, что использование большего порога может быть дорогостоящим с точки зрения производительности.

Смотрите полную документацию здесь: https://developers.google.com/bigquery/docs/query-reference#aggfunctions


UPDATE: 2017

С BigQuery #standardSQL COUNT(DISTINCT) всегда точен. Для приблизительных результатов используйте APPROX_COUNT_DISTINCT(). Зачем кому-то использовать приблизительные результаты? See this article.

20

Я использовал EXACT_COUNT_DISTINCT(), чтобы получить точный уникальный счет. Это чище и более общее, чем COUNT (DISTINCT значения, п> NumRows)

Найдено здесь: https://cloud.google.com/bigquery/query-reference#aggfunctions

+0

EXACT_COUNT_DISTINCT() кажется, что это только часть Наследства SQL (https://cloud.google.com/ BigQuery/документы/ссылки/наследие-SQL). Прошу также перечислить примечания Стива Ганема в нижней части этого сообщения: https://stackoverflow.com/questions/45840341/firebase-bigquery-monthly-event-counts/45850267#45850267 – Dirk