試してみたブログ

AI関連・iPhone/Pixelなどのガジェット・音声入力・サーマルプリンタなど興味をある事をどんどん試してみた際の記録

BQのクラスタ化で最適化する

背景

毎回ほぼ全テーブルの特定のカラムに対してwhereで区切った上で使用する。

同僚からとても良い方法を教えて貰ったので紹介する。

特定のカラムにwhereで区切っていたの所をクラスタ化すると良いらしい。

docs.cloud.google.com

よく使う条件での検索や集計が速くなる(クラスタ列での絞り込みが多いほど効果的)。​

データ量が多いテーブルほど効果が高い(おすすめは64MB以上のテーブル)。​

クエリの料金や実行時間が下がる可能性がある。

試してみた

dbtを使っているのでdbt側で指定した

{{
    config(
        materialized="table",
        cluster_by="column_name",
    )
}}

結果

条件 バイト数
where句なし 1.18 GB
column_nameで絞る 175 MB

普段の1/10ぐらいのスキャン料で済みそう。これは最高だ。 もっとデータ量が多くなればパーティショニングなども使えば良いが現状だとクラスタリングで十分そう。