[Looker] view_nameパラメータとfromパラメータの違いを理解する #looker

2021.08.31

Lookerでは、モデル内のExplore名やExplore内のjoin名には一意制約があり、同じviewを指定るすとエラーになってしまいます。

このエラーを回避するためにview_nameパラメータとfromパラメータという2つのLookMLパラメータが用意されています。今回はこちらの2つのパラメータの動作の違いや利用シーン別のユースケースをご紹介します。

view_nameとfromパラメータの違い

users viewを1つだけ使って、以下の2つのExploreを定義しました:

explore: users {}

explore: customer {
  view_name: users
  join: buyer {
    from: users
    sql_on: ${buyer.id} = ${users.id} ;;
  }
}

一つ目のExploreはusers view単体で定義しています。

二つのめExploreもusers viewをベースビューにしたいのですが、同じExplore名は定義できないので、Explore名をcustomerにして、view_nameパラメータで参照するviewをusersに指定しています。

さらに、customer Exploreではusers viewをjoinしています。Explore内でも同じview名でjoinできないため、join名をbuyerにしてfromパラメータで参照するviewをusersに指定しています。

この定義でCustomer Explore画面はこのように表示されます:

まず、画面左のフィールドピッカーではBuyerとUsersのフィールドのセットが表示されています。

view_nameで参照するviewを指定した場合、ExploreのUI画面や生成されるSQL、そしてLookMLでの参照全てがview_nameで指定したview名になります。Explore名のみCustomerと表示されています。

対して、fromパラメータで指定した方はフィールドピッカーではBuyer、SQLでは"PUBLIC"."USERS" AS buyer、LookMLでの参照も${buyer.column_name}と、join時に定義した別名をもとに全てが機能します。

両者の動きの違いを確認したところで、各パラメータの利用シーンをご紹介します。

view_nameを使うケース

  • Exploreをextendsする場合

Exploreをextendsする場合、拡張先でオブジェクト名が上書きされてしまうため、joinを定義している場合、参照できないviewがあるというエラーの原因になってしまいます。そのため、Exploreをextendsする際にはview_nameで明示的に参照するviewを指定しておく必要があります。

詳しくは下記記事の[Exploreでextendsを使う際の注意点]をご確認ください。

fromを使うケース

  • 同一Explore内でjoinキーを変えて同じviewをjoinする時

Explore内で別々のキーで基のviewに対してjoinをする必要がある時があると思います。そういう場合には、LookMLの参照値を変えられるfromパラメータを利用して、同じviewでも別のオブジェクトのように扱えるfromパラメータを利用します。

まとめ

機能が似ていて使い分けが難しいview_nameパラメータとfromパラメータの違いと利用シーンをご紹介しました。