BigQueryのクラスタ使ってみた
BigQueryのパーティション指定はしたことはあるけど
クラスター使ったことなかったので使ってみた
クラスターテーブル作成
現在、パーティション分割テーブル以外のテーブルではクラスタリングはサポートされていません。
と公式にあるので、dateフィールドをパーティションにして
クラスターにしたいフィールドを指定する
(最大4つまで指定できるらしい)
CREATE OR REPLACE TABLE
`[dest_project_id].[dest_dataset].[dest_table]`
PARTITION BY
processing_date
CLUSTER BY
store_code,
jan_code AS
SELECT
*
FROM
`[origin_project_id].[origin_dataset].[origin_table]`
検証してみる
まずはパーティションがちゃんと効いてるかみてみる
何にも指定しないと45.8GBもかかる!
パーティションのフィールドを指定してみる
60.4MBまで下がった!パーティションすごい!
クラスターの効果を見てみる
81.4MB。むむ。むしろあがっとるやないかい🤯
と思ったが、実行してみると39.5MB。
クラスターの効果は実行するまでわからない説🧐
フィールドを指定する順番
公式によるとWHEREで指定する順番は
クラスターで指定した順序じゃないといけないらしい。ので検証してみる!
store_code, jan_codeの順でクラスタ指定したので
逆順でWHERE句指定したら、効かなくなるんでしょう😎
と思いきや効いてる。わからん👶
公式のサンプル見てると
パーティションフィールド指定してない。。それでやってみる
70.4GBだけど20.2GBまで下がる。クラスタ効いておる
2つ目に指定したjan_codeで指定してみると
45.8GB->45.8GBと全く減ってない。クラスタ効いてない!そういうことか
JOINでも効いてくれる
クラスタの最初に指定したstore_codeをJOINの条件に指定してみると
24.5GBが7.1GBに!
クラスタはパーティションと一緒に作成する必要がるが、クラスタ単体でも有効な効果が出てくれる!素敵!
試しにクラスタ2つ目のjan_codeでJOINすると効いてない
やはりクラスタで指定する順序は重要なようだ
まとめ
ということで、クラスタ思ってたより素敵!
別にお金かからないし、これからはちゃんとセットしよう
この記事が気に入ったらサポートをしてみませんか?