3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

BigQuery のTABLESAMPLEを試してみる

3
Last updated at Posted at 2021-04-02

BigQuery の2021年3月のアップデートにTABLESAMPLEがありました。ちょっと試してみたいと思います。

TABLESAMPLE オペレータ

対象のテーブルが大量でサンプリングしたい場合に有効そうです。使い方は、簡単以下のように FROM の後のテーブルに TABLESAMPLE SYSTEM (x PERCENT) をつけるだけ。

例えば、全量に対して10%のデータをサンプリングしたい場合、次のようなクエリになります。

SELECT
  COUNT(1) AS c
FROM
  `bigquery-public-data.samples.wikipedia` TABLESAMPLE SYSTEM (10 PERCENT)

こちらのテーブルは全量 313,797,035 件に対して、以下のような結果になります。

Screen Shot 2021-04-02 at 11.21.19.png

約10%ですね、きれいに10%にはならない仕様で、それはBigQueryがデータを複数件まとめたブロックという単位で分割して保存しており、そのブロック単位でサンプリングするからと公式Docに書いてあります。

なので、より正確に10%のデータを取りたい場合は、次のようにして TABLESAMPLE で絞りつつ、rand() 関数でサンプリングするという方法が同Docで提案されています。

SELECT
  COUNT(1) AS c
FROM
  `bigquery-public-data.samples.wikipedia` TABLESAMPLE SYSTEM (50 PERCENT)
WHERE rand() < 0.2

あと、TABLESAMPLE を使った場合、キャッシュが聞かないので、毎回クエリが実際に走ります。
料金は、サンプリングしたブロックに絞られるようですので、シンプルに rand() のみ使いサンプリングするよりコストやパフォーマンスが改善できそうです。(参考)

3
1
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?