BigQuery COUNT (DISTINCT значение) vs 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, что на 390row больше, чем количество строк в таблице.


person Balazs Gunics    schedule 17.05.2013    source источник


Ответы (2)


В BigQuery COUNT DISTINCT - это статистическое приближение для всех результатов, превышающих 1000.

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

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


ОБНОВЛЕНИЕ 2017:

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

person Jeremy Condit    schedule 19.05.2013
comment
¿Стоимость все еще выше при использовании count по сравнению с APPROX_COUNT_DISTINCT в стандартной версии? или функция была оптимизирована - person Kemen Paulos Plaza; 09.09.2020

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

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

person smntx    schedule 22.05.2015
comment
EXACT_COUNT_DISTINCT () кажется только частью устаревшего SQL (cloud.google. com / bigquery / docs / reference / legacy-sql). Также просмотрите заметки Стива Ганема внизу этого сообщения: stackoverflow.com/questions/45840341/ - person d_-; 24.08.2017