GameWith Developer Blog

GameWith のエンジニア、デザイナーが技術について日々発信していきます。

BigQueryのビュー、Looker Studioでパーティションちゃんと効いてますか?

BigQueryのビュー(View Table)をLooker Studioのデータソースにしたとき、「あれ、パーティション効いてなくない...?」と焦った経験はありませんか?

この記事では、ビューでもパーティションを効かせる方法と、その確認方法、ハマりやすい注意点をまとめます。

結論

パーティション列(_PARTITIONTIMEなど)を加工せずそのまま出力し、Looker Studioの「期間のディメンション」に指定する

SQLの書き方

ビューの定義でパーティション列をそのまま出してください。

ポイントは、パーティション列をCASTDATE()などの関数で加工しないことです。関数を通すとBigQueryのオプティマイザがパーティション列だと認識できず、フィルタのプッシュダウンが効かなくなります。

SELECT
    -- パーティション列を加工せずそのまま出力
    t._PARTITIONTIME AS partition_date,
    
    -- マスタとの結合で付与するフラグ
    IF(m.id IS NOT NULL, TRUE, FALSE) AS is_featured,
    m.name AS category_name,
    
    -- 他の日付カラムは除外しておく(後述の注意点を参照)
    t.* EXCEPT (event_date)
FROM
    `your-project.your_dataset.partitioned_table` AS t
    LEFT JOIN `your-project.your_dataset.master_table` AS m 
        ON t.category_id = m.id

上記は _PARTITIONTIME(取り込み時間パーティション)の例ですが、列ベースのパーティション(DATE型カラムなど)でも同様です。

Looker Studio側の設定

  1. データソースとしてビューを接続
  2. レポートの「期間のディメンション」に partition_date を指定

期間のディメンション設定

通常テーブルにある「パーティション列を日付ディメンションとして使用する」オプションは、ビューには表示されません。レポート側で明示的に設定が必要です。

パーティションが効いているか確認する

設定だけで安心せず、BigQueryのジョブエクスプローラで実際の動きを確認しましょう。

  1. BigQueryコンソールで「ジョブエクスプローラ」を開く
  2. Looker Studioから発行されたクエリを探す
  3. 「処理されたバイト数」を確認

Looker Studio側でレポートの期間を変えてみて、処理バイト数が期間に比例して増減すればパーティションプルーニングが効いています。

ジョブエクスプローラ

Looker Studioが生成するクエリを見てみると下記のように期間の絞り込みが行われていました。

SELECT columns...
FROM (
    SELECT 
        t0.partition_date AS clmn6_,
        t0.other_columns...
    FROM `your-project.your_dataset.your_view` AS t0
)
WHERE clmn6_ >= TIMESTAMP '2025-12-23' 
  AND clmn6_ < TIMESTAMP_ADD(TIMESTAMP '2025-12-23', INTERVAL 1 DAY)

注意点

複数の日時フィールドがある場合

ビューにcreated_atupdated_atなど複数の日時フィールドがあると、パーティションと無関係なフィールドでフィルタされてしまい、全テーブル走査が発生する可能性があります。

Looker Studioはデータソースに日付型フィールドがあると、レポート配置時に自動で「期間のディメンション」を割り当てる仕様があります。意図しない列が選ばれるのを防ぐため、日時フィールドはpartition_dateのみに絞っておくのが安全です。

多段ビューや複雑なUNION

ビューの中でさらに別のビューを呼んでいたり、複雑なUNION ALLを行っている場合、パーティションが末端のテーブルまで伝播しないことがあります。ジョブエクスプローラで実際のWHERE句に日付条件が入っているかチェックしてください。

そもそもなぜビューを使うのか

通常テーブルではなくビューを選ぶケースとしては以下のようなものがあります。

  • リアルタイム性が必要:外部データ(スプレッドシートなど)との結合結果を常に最新にしたい
  • 複雑な加工をSQL側で管理したい:Looker Studio上でも計算フィールドは作れるが、管理コストが高くなりがち

まとめ

項目 ポイント
SQLの書き方 パーティション列を加工せずそのまま出力
Looker Studioの設定 期間のディメンションにその列を指定
確認方法 ジョブエクスプローラで処理バイト数の変化を見る

ビューでもパーティションは効かせられます。ただし通常テーブルより設定が暗黙的なので、必ずジョブエクスプローラで確認することをおすすめします。


GameWithではエンジニアを絶賛募集中です!

ご興味ありましたら是非カジュアル面談をお申し込みください! github.com