BigQuery COUNT (значение DISTINCT) против COUNT (значение)

Я нашел глюк/ошибку в bigquery. Мы получили таблицу на основе данных банковской статистики по starschema.net:clouddb:bank.Banks_token

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

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

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

Row totalrow    bankidcnt    
1   9513    9903    

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

Ответ 1

В 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(). Зачем кому-то использовать приблизительные результаты? См. статью.

Ответ 2

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

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