[Looker]PDTをLooker以外から参照できるようにしてみる #looker
さがらです。
Lookerで複数のテーブルを結合・集計してPDTを生成することがあるかと思いますが、「作ったPDTをLooker以外でも参照できないのかな」と思ったことがある方はいるのではないでしょうか?
そんな方の要望を満たす方法がありますので、本ブログでご紹介したいと思います。
PDTって何だっけ?
ここで改めて、LookerのPDT、略さずに言うと「Persistent Derived Table」とは何かを振り返ります。
かなり端的に言うと、「Looker上で定義したSQLまたはLookMLの内容に基づいて、接続先のDWH・DBに実テーブルを作成する」機能です。
LookerでWINDOW関数を用いたり、注文単位➟店舗単位など別粒度へのデータ変換を行いたいときには派生テーブルを使わないといけませんが、この派生テーブルを実テーブル化させたものがPDTとなります。
より詳しく知りたい方は、下記の公式Docやブログが参考になるかと思います。
PDTをLooker外から参照する時の問題点
前述の通り、PDTは「接続先のDWH・DBに実テーブルを作成する」ため、普通のテーブルとして使用することが可能です。
なのですが、PDTは再生成するたびにテーブル名が変わってしまうという仕様のため、このままPDTを使用しようとすると再生成のたびに参照先のテーブル名の記述を変更しなくてはいけません。
実例を示すと、以下の流れですね。
PDTを作成したあと、「派生テーブルを再作成して実行する」を押してPDTを再作成すると、下図の赤枠内のPDTのテーブル名が変わっていることがわかるかと思います。
PDTをLooker外でも安定して参照させるには
そこで、PDTのテーブル名が変わっても安定して参照できるようにするためにpublish_as_db_view
というパラメータが用意されています。
このパラメータをyes
にしていると、対象のPDTを参照するビューを接続先のDWH上に作成してくれます。
それだけでなく、PDTの再生成が行われるたびにビューが参照するPDTのテーブル名を自動で書き換えてくれるため、ユーザーはそのビューを参照すればPDTのテーブル名が変わったことを気にせずにPDTを使用することができる、という機能を持っています。
使い方
使い方としてはとても簡単で、Looker外からも参照したいPDTを定義しているderived_table
パラメータ上で、publish_as_db_view: yes
と記述するだけでOKです。
実例
実際にパラメータを適用すると、どうなるのかを確認してみましょう。
下図はBigQueryの例ですが、PDTを格納しているデータセットと同じ所に、ビューが追加されます。
このビューの詳細を見ると、対象のPDTに対してSELECT *
を行うクエリが登録されています。
ここでPDTの再生成を行ったとき、ビューのクエリ内容が本当に書き換わっているのかを確認してみます。
下図赤枠のように、ビューのクエリ内容が新しいPDTのテーブル名に書き換わっていることが確認できました。
これで、Looker外からこのPDTを使用したい場合は、このビューを使用すればPDTのテーブル名に左右されず安定して参照できますね!
注意点
PDTを外部参照する際に便利なpublish_as_db_view
ですが、2つ注意点があります。
persist_forだけを用いたPDTは対象外
派生テーブルを永続化してPDTとするには、datagroupの適用、sql_trigger_valueの定義、persist_forの定義、という3種類の方法があるのですが、publish_as_db_viewは、persist_forだけで永続化されたPDTには対応していません
公式Docにも、下記のように記載があります。
The publish_as_db_view parameter is supported only for PDTs that use datagroup or sql_trigger_value caching. PDTs using persist_for aren’t supported.
常用するテーブルならば、事前にDWH上で作成することが望ましい
本ブログで紹介しておいて難ですが、常用するテーブルならば、事前にDWH上で作成しておくことがやはり理想的です。
理由としては色々考えはあると思いますが、1つ挙げるならば「PDTは基本的にconnectionで設定した専用のスキーマ(データセット)に格納されるため、一般人が参照しづらい場所にある」ことが挙げられるかと思います。
ただこう聞くと、「じゃあ、いつpublish_as_db_view
使うの!」となりかねないですよね…
なので、1つ実際のユースケースを考えてみました。
- ユーザーから「このExploreに使用しているデータを他のツールでも使いたいんだけど」と問合せを受ける
publish_as_db_view
をyes
にしてユーザーに作られたビューを公開する- ユーザーから「このデータいいね!これからも使いたい!」と良い感想を頂いたら、使用しているDWHで適切なスキーマとテーブル名で、テーブル定義する
こういった形で、「Lookerをきっかけとして他のツールでも使用されるデータが生まれる」というユースケースならば、publish_as_db_view
はお手軽に使用できますし、ちょうど良いのではないでしょうか。
最後に
いかがでしたでしょうか!
PDTをより有効活用する上でも、便利な機能かと思います。
ぜひ使用できそうな機会があれば、お試しください。