[Looker21.10新機能]永続的派生テーブル(PDT) の作成時マテリアライズドビューが利用可能になりました #looker

2021.08.12

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

さがらです。

下記Looker21.10リリースノート上の新機能「永続的派生テーブル(PDT) の作成で、マテリアライズドビューが利用可能になります。」について検証してみたので、その内容をまとめてみます。

マテリアライズドビューとは?

まず、マテリアライズドビューについて簡単におさらいしておきます。

各DWH・DBによって特徴は異なるのですが、普通のビューとは異なり「ビューに登録されたクエリが返す結果を実際に物理データとして保持する」のが大きな特徴です。このため、通常のビューを参照するよりも高速に結果を返すことが可能となっています。

更に、DWH・DBによっては保持結果の自動更新、差分更新といった機能もあるため、各種ELTサービスを使ってパイプラインを構築せずとも、マテリアライズドビューとして登録するだけでデータマートの生成が可能になります。

ちなみに、2021年8月12日現在LookerのPDTにマテリアライズドビューが対応しているのはBigQueryとRedshiftのみであるため、ご注意ください。

マテリアライズドビューでPDTを構築してみる

ということで、早速試してみたいと思います!今回はBigQueryの環境で試してみます。

方法はとても簡単、対象のderived_tableパラメータの中で、materialized_view: yesと記述するだけです!

ポイントは、通常のPDTと違いdatagroup_triggersql_trigger_valueでPDTの更新ポリシーの適用が不要なことですね!

この状態でExploreでクエリを発行してみると、下図のようにマテリアライズドビューに対してクエリが発行されていました。

「このマテリアライズドビューがいつ作成されたのか?」と気になってBigQuery上でクエリを確認してみましたが、下図のように履歴がありました。

一番上が先程Exploreで発行されたクエリで、一番下で展開しているクエリがマテリアライズドビュー生成のクエリです。「materialized_view: yes設定後、対象のExploreに対して初めてクエリが発行された時」に最初のマテリアライズドビューが作られるようですね。

このように、とても簡単にPDTをマテリアライズドビューで構築できることがわかりました!

マテリアライズドビューのメリット

ここで、PDTをマテリアライズドビューで構築することのメリットをまとめてみたいと思います。

更新ポリシーの定義が不要

前述した通り、PDTをマテリアライズドビューで構築する場合はdatagroup_triggersql_trigger_valueを必要としません。

例えば、更新時間が不定期で更新ポリシーの設定が難しいテーブルを用いるPDTの場合には、マテリアライズドビューの自動更新はとても便利だと思います。

マテリアライズドビューの注意点

ここまで良い点ばかり述べてきましたが、逆に注意すべき点もあります。

定義時のクエリの内容に制約がある

例えば、BigQueryのマテリアライズドビューの場合、「単一のテーブルに対する集計クエリ」だけが一般提供されています。(8月12日時点、集約しないクエリや他テーブルとのJOINクエリはプレビュー機能として提供)

他にも使用できる集計関数が限られているなど、様々な制約があります。そのため、使用前には対象のクエリがマテリアライズドビューに対応しているか、今一度確認することを勧めます。

テーブルが更新するたびに良くも悪くもクエリが発行される

LookerのPDTでマテリアライズドビューを使用する場合は、自動更新をONにして使用するのが前提となります。(更新ポリシーを設定しないですからね。)

この自動更新はとても便利なのですが、対象のテーブルに少しでも変更があると、すぐに登録されているクエリを実行してマテリアライズドビューの内容を更新する動きを取ります。

増分更新の機能もあるため一概にクエリ量が増加するわけではないですが、例えば多くのレコードを頻繁にUPDATEするようなテーブルを対象とした場合には逆にクエリ量が増加してしまうかもしれません。

特にBigQueryのオンデマンド契約の場合には注意が必要だと思いますので、ご注意ください。

余談

ホントはBigQuery特有のスマートチューニングをメリットの一つとして記したかったのですが…上手く事例が作れず仕舞いでした…

いつかリベンジしたいです。