0
0

More than 1 year has passed since last update.

【データ基盤構築/BigQuery】ベーステーブルを全量洗い替え更新してしまうと、Materialized Viewの利点が得られない

Last updated at Posted at 2022-10-19

今回の課題

データポータルでBigQueryのMaterialized Viewをデータソースにしてレポートを作成すると、
Materialized Viewのベーステーブル更新後に下記のエラーが発生してしまうようになった。

エラー内容

データセットの設定エラー
Looker Studioではデータセットに接続できません。

基になるデータセットからデータを取得できませんでした

BigQuery error: Materialized view ビュー名 references table プロジェクト名:ビュー名 which was deleted and recreated. The view must be deleted and recreated as well.
エラー ID: e74aa98e

Materialized Viewとは

Materialized Viewとは簡単に言うと、
ベーステーブルから差分のみ読み取って結果を返してくれる実体を持つビューのこと。

ベーステーブルにデータが追加された場合、
そのベーステーブルから生成されているMaterialized Viewにも増分のデータの変更が追加されるイメージ。

また、Materialized Viewに対してクエリを実行することもでき、
そのクエリは高速で消費リソースも抑えて実行される。
マテリアライズド(実体化)ビューの概要(公式ドキュメント)

Materialize Viewを使用すると上記のようなメリットが得られるので、
データマートを作成してそこからデータポータルに繋げるよりも、
Materialized Viewを作成して、そこからデータポータルに繋げた方が、パフォーマンスが向上するのではと考えた。
しかし、エラーが発生してうまく活用できなかった。

なぜ今回エラーが発生してしまったのか

タイトルの通り、Materialized Viewのベーステーブルを全量洗い替え更新としていたからだった。
公式ドキュメントに記載の通り、
ベーステーブルを全量洗い替え更新(テーブルを削除してから再作成)した場合、エラーとなるようだった。

Materialized Viewも再作成するとエラーは発生しないようだが、
Materialized Viewの差分データを取得してパフォーマンスを上げるというメリットを活かすことができないので、
いつも通りデータマートを作成してデータポータルに接続することにした。

Materialized Viewの注意点を調べてみた

上記のような注意点が他にも無いか調べてみたところ、いくつかあった。

  • Materialized Viewは、元になるテーブルと同じデータセット内に生成しないと、効果が得られない。
  • WINDOW関数を使用できない
  • COUNTでDISTINCTオプションを使えない
  • スカラサブクエリを使用できない
  • ベーステーブルを全量洗い替え更新にすると、効果が得られない。
    └マテリアライズドビューを削除せずにベーステーブルを削除した場合、マテリアライズドビューに対するクエリは失敗し、更新も失敗する。
    └マテリアライズドビューを再作成する場合は、マテリアライズドビューも再作成する必要がある。

マテリアライズドビューの制限事項(公式ドキュメント)

今回分かったこと

ベーステーブルにINSERTで行を挿入して更新(差分更新)
する場合は、Materialized Viewの恩恵を受けられるが、全量洗い替えでは受けられない。

0
0
0

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
0
0