2013-05-17 16 views
11

bigqueryにグリッチ/バグが見つかりました。 私たちは下の銀行統計データに基づいて、テーブルを持っ starschema.net:clouddb:bank.Banks_tokenBigQuery COUNT(DISTINCT値)とCOUNT(値)

私は次のクエリを実行した場合:

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

を、私は次のような結果を得る:

Row totalrow bankidcnt  
1 9513 9903  

私の問題は、もし私が9513rowを持っていれば、9903rowを得ることができます。これは、テーブルのrowcountよりも390rowです。 BigQueryので

答えて

21

、個別のカウントあなたが近似が使用されるしきい値を与えるために、オプションの二番目の引数を提供することができる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値、N> numRowsの数)よりも、よりクリーンで一般的です:https://cloud.google.com/bigquery/query-reference#aggfunctions

+0

EXACT_COUNT_DISTINCT()、それはレガシーSQL(https://cloud.google.com/の一部でしかないように思えますbigquery/docs/reference/legacy-sql)を参照してください。また、この記事の一番下にあるSteve Ganemのメモをご覧ください。https://stackoverflow.com/questions/45840341/firebase-bigquery-monthly-event-counts/45850267#45850267 – Dirk

関連する問題