[Looker] if dev if prod を使ってLookML開発時のデータの切り替え作業を自動化する #looker

2021.08.19

Lookerに限ったことではないですが、開発中と本番で別のデータベースを参照したい、もしくは開発中はテーブルの一部だけ参照できればいいといったことがあると思います。

本番へデプロイする前にテーブル名を変更する、もしくはweher句の条件を削除するといった運用だと人手が入ってしまい、ミスが起きてしまうことが容易に想像できます。かといって本番で使用するテーブルが巨大な場合、開発段階で本番環境と同じものを参照してしまうと経済的ではありません。

このような場合にLookerでは-- if prod -- xxx -- if dev -- yyyといった記述をすることで、Lookerが自動でユーザーが開発モードにいるかどうかを判断してくれます。

本記事では、if dev if prodの機能を利用して手動操作なしでユーザーが開発モードにいる場合には本番とは異なる状態になるように設定する方法をご紹介します。

開発用データベースのテーブルを参照する

まずはsql_table_nameにif prod if devを記入することで、開発モードと本番モードにいる時で参照するテーブルを切り替えてみます。

LookML

view: prod_dev {
  sql_table_name:
    -- if prod -- project.prod.table_name
    -- if dev -- project.dev.table_name
  ;;
  dimension: dimension {}
}

開発モードのExplore

if prodの方がコメントアウトされているのがわかります。

本番モードのExplore

無事にif prodで指定した方のテーブルを参照しています。

SQL派生テーブルで使用する

SQL派生テーブルでは、sqlパラメータ内のfrom句とwhere句で使用することできます。

今回はwhere句でどのような動きをするのかを確認します。

view: sql_derived_table {
  derived_table: {
    sql: 
      select prefecture
      from `horimoto-risa.e_stat.population_20191001`
      where -- if prod -- 1=1
            -- if dev -- year = "2016年"
    ;;
  }
  dimension: prefecture {}
}

開発モードのExplore

本番モードのExplore

where句でも問題なく本番モードか開発モードかで対象ではない条件はコメントアウトしてくれています。

おまけ

sql_always_whereパラメータでは使用できませんでした。