dbtで作成したデータモデルをそのまま可視化に使えるBIツール「Lightdash」を使ってみた
大阪オフィスの玉井です。
今回は、dbtにネイティブ対応しているBIツールを紹介します。
Lightdashとは
名前の通り、ライトなBIツールなのですが、接続先がDWHではなく、dbtプロジェクトなのが特徴です。
dbtを使う理由の1つに、BIツールで分析しやすいデータを用意する、というものがあると思います。普通は、dbtを通してDWH上にできたテーブルやビューを、別途BIツールで接続して利用します。しかし、Lightdashは、DWHを介すのではなく、直接dbtのコードを利用して可視化を行います(裏側としては、dbtのコードを利用して、dbtの後ろにあるDWHにクエリを実行するようになっています)。
やってみた
今回はローカルで試します。OSSなので無料です(有料版については後述)。
環境
- macOS 11.5.2
- dbt CLI 0.20.1
- docker 20.10.8
dbtを接続しているDWHはBigQueryです。
前提など
dbtプロジェクトを参照するツールなので、既に(正常に動作する)dbtプロジェクトがあることが前提です。
インストール(準備)
Lightdashが入ったコンテナがGithubにあるので、それを持ってきます。
$ git clone https://github.com/lightdash/lightdash
Lightdashのディレクトリに移動します。そして、いくつか環境変数を設定します。今回のdbtプロジェクトは、BQをOAuth認証で接続しているので、gcloudに関する情報も設定してあげる必要があります。
$ cd lightdash $ export DBT_PROJECT_DIR=<可視化したいdbtプロジェクトのパス> $ export DBT_PROFILES_DIR=<dbtのprofiles.ymlのパス> $ export GCLOUD_CONFIG_DIR=<gloud SDKのパス>
一通り設定できたところで、コンテナを起動します。
$ docker compose -f docker-compose.yml -f docker-compose.service-account.yml up
画面の確認
起動に成功すると、下記が表示されますので、Webブラウザから接続します(主張?がすごい)。
... lightdash_1 | | | | | | | | lightdash_1 | | | | | | | | lightdash_1 | | | | | | | | lightdash_1 | \ | / \ | / \ | / \ | / \ | / \ | / \ | / lightdash_1 | \|/ \|/ \|/ \|/ \|/ \|/ \|/ lightdash_1 | ------------------------------------------ lightdash_1 | Launch lightdash at http://localhost:8080 lightdash_1 | ------------------------------------------ lightdash_1 | /|\ /|\ /|\ /|\ /|\ /|\ /|\ lightdash_1 | / | \ / | \ / | \ / | \ / | \ / | \ / | \ lightdash_1 | | | | | | | | lightdash_1 | | | | | | | | lightdash_1 | | | | | | | | ...
ユーザー登録みたいなのが表示されるので、素直に入力します(何に使われるのか不明)。
Lightdashのトップページが表示されました!
左側には、dbtで定義されているデータモデルが選べます。これをテーブルに見立てて(実態はテーブルですが)、ビジュアライズしていく感じですね。
ymlファイルに記述しているメタデータを拾ってきてくれているようです。また、モデル間のリネージも確認できます。
…
…ディメンションとかが全く選べない…?
DimensionsとMetricsを定義する
Lightdashは、分析したいカラム(dimensionとmetrics)を、schema.ymlファイルから拾います。ですので、ここをちゃんと書いていないと、フィールドが一切出てこず、何の分析もできません。
というわけで、今回使用するデータモデルについて、ちゃんとymlファイルで定義してきます。
version: 2 models: - name: dim_customers description: "顧客の購買データを集計したもの" columns: - name: customer_id tests: - unique - not_null - name: first_name - name: last_name - name: first_order_date description: "初回購入日" - name: most_recent_order_date description: "直近購入日" - name: number_of_orders meta: metrics: sum_number_of_orders: type: sum - name: lifetime_value meta: metrics: sum_lifetime_value: type: sum
テストやdescriptionをしっかり記述しているプロジェクトの場合は、改めて書くことはほとんどありません(今回は検証用にテキトーなプロジェクトを使っているので、ほとんどまともに書いてなかった)。
dimensionについては、他のBIツールと同じく、文字列等の計算できない項目を指します。これはcolumns
で定義するだけでLightdash側にも反映されます。
metricsというのは、他のBIツールでいうメジャーです。計算できる項目を指します。これはcolumns
(とname
)だけではダメで、その後にmeta
→metrics
→<metricsの名前>
→type
と書いていく必要があります。type
は集計方法を指定します。sumとかAverageとかcountとかです。
一通り定義してLightdash側をリフレッシュすると、下記のように、フィールドが出揃います。
可視化してみる
後は普通のBIツールのような感じで使います。フィールドを選んでRun Queryを押すだけです。簡単なビジュアライズが出てきます。
裏側のSQLもわかります。
フィルターもかけれます。
今回はやっていませんが、モデル同士のJoinもできます(必要な結合はdbt側で済ませているので、あまり必要性を感じない…)。
有料版について
今回使用したのはOSS版ですが、なんとクラウド版が準備中とのことです(要するにSaaS)。
※公式サイトのPricingより
現在プライベートベータということで、触りたい方は応募しましょう。
感想など
触っていて一番感じたのが「Lookerっぽさがある?」でした。
ビジュアライズ画面の構成がExploreっぽいのもありますが、dimensionとmetricsをコードで定義するところが、LookMLを想起させました。とはいえ、前述したように、しっかりしたdbtプロジェクトであれば、ある程度はすでに定義済みだとは思います。しかし、metricsに関しては、Lightdashを使うようになって初めて書くことになるはずなので、ここはLookMLでmeasureを書いている時とすごく被ります。
Lookerが「LookMLというコードを介してSQLを動的に生成する」に対し、Lightdashは「dbtのコードを介してSQLを動的に生成する」なので、発想が似ている(そもそもLooker起点?)のかなあ、と思ったりしました。
「うーん」という部分は、やはり可視化(ビジュアライズ)の力でしょうか。もうほんとのほんとに最小限の機能しかないので、これで本番相当のダッシュボードを作るというのは、正直キビシイと思いました。
おわりに
少しづつですが、dbtと連携するツールというものが増えてきています。それだけdbtが普及してきているということですね。今後も要チェックです。