web-dev-qa-db-ja.com

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    

私の問題は、9513行がある場合、どうして9903行を取得できるかということです。これは、テーブルの行数よりも390行多くなります。

20
Balazs Gunics

BigQueryでは、COUNT DISTINCTは1000を超えるすべての結果の統計的な近似値です。

オプションの2番目の引数を指定して、近似が使用されるしきい値を指定できます。したがって、例でCOUNT(DISTINCT BankId、10000)を使用すると、正確な結果が表示されます(実際の行の量は10000未満であるため)。ただし、より大きなしきい値を使用すると、パフォーマンスの点でコストが高くなる可能性があることに注意してください。

完全なドキュメントを参照してください: https://developers.google.com/bigquery/docs/query-reference#aggfunctions


2017年の更新:

BigQueryでは、#standardSQL COUNT(DISTINCT)は常に正確です。おおよその結果を得るには、APPROX_COUNT_DISTINCT()を使用します。誰もがおおよその結果を使用するのはなぜですか? この記事を参照

33
Jeremy Condit

正確な一意のカウントを取得する方法としてEXACT_COUNT_DISTINCT()を使用しました。 COUNT(DISTINCT値、n> numRows)よりもクリーンで一般的です

ここにあります: https://cloud.google.com/bigquery/query-reference#aggfunctions

28
smntx