はじめに
12/15(日)にちゅらデータのデータエンジニアの人たちが集まり、オンライン合宿を行いました。
今回のオンライン合宿は各自でやりたいことに取り組み、最後にLTで発表する流れでした。
私はBIツール周りを色々触ってみようと思いました。
最終的には時間の都合でLightdashしか触れなかったのでそちらを報告します!
Lightdashとは
Lightdashは、dbtで定義したファイルをそのまま可視化することができるツールです。
LightdashにはOSS版とクラウド版がありますが、今回はOSS版を使ってみました。
ちなみにクラウド版の場合、21日のフリートライアルがありますが、スターターでも$800/月くらいのサービスになります。
今回私が実施した使用環境
OS: Mac
dbt-core: 1.8.3
Lightdash: 0.1418.1
Database: Snowflake
Snowflakeの事前準備
RAW、DWH、MARTのスキーマを作成しておきました。
create database bi_training_db;
create schema raw;
create schema dwh;
create schema mart;
それ以外にもロールやユーザーが必要ですがそれぞれ作成してください。
データの準備
今回のデータセットはタブローではお馴染みのSuperstoreを使いました。
サンプル-スーパーストア.xlsはここからダウンロードして、注文、返品、関係者のシートがあるため、それぞれcsvで保存しなおしました。(こちらのリポジトリのdatasouceフォルダにあります)
その後、Snowsightにて手動で取り込みました。(下記のキャプチャの場所で実行)
dbtの準備
こちらのリポジトリのソースコードを参考にしてください。
.env.sampleにある環境変数を各自の環境に合わせていただければ動くはずです!
Lightdashのセットアップ
ここは弊社のkei忍者が書いていましたので参考にしてください。(dbtの箇所は不要です)
Lightdash と Snowflake を使ってデータを可視化する方法
最終的にはLightdashを起動して下記をdbtのプロジェクトフォルダで実行できればOK
> lightdash deploy --create
Lightdashの便利だと思ったこと
日付型は自動でDay、Week、Month、Yearで指標にできる
上記キャプチャのOrderdateですが日付型のカラムになります。こんな感じで日付の粒度が分割されるので、月単位の売り上げ、年単位の売り上げ、とかが簡単にできちゃいます。
ちなみに左のDimensionsからOrderdate-MonthとSales(売上金額)を選択して、[Run query]を押すとこんなチャートが作成されます。が、Salesがサマリーしていないので、下部にあるSQLを変更してあげます。
SELECT
DATE_TRUNC('MONTH', "mart_orders".orderdate) AS "mart_orders_orderdate_month",
"mart_orders".sales AS "mart_orders_sales"
FROM BI_TRAINING_DB.mart.mart_orders AS "mart_orders"
GROUP BY 1,2
ORDER BY "mart_orders_orderdate_month" DESC
LIMIT 500
↓
SELECT
DATE_TRUNC('MONTH', "mart_orders".orderdate) AS "mart_orders_orderdate_month",
SUM("mart_orders".sales) AS "mart_orders_sales"
FROM BI_TRAINING_DB.mart.mart_orders AS "mart_orders"
GROUP BY 1
ORDER BY "mart_orders_orderdate_month" DESC
LIMIT 500
再度[Run query]すると狙った通り月毎の売上高のチャートが表示されました。
自動でdbtのymlを作成してくれる
Lightdashには自動でymlファイルを作ってくれる機能があります。そのためカラム名やカラムのタイプをわざわざ記述する必要がありません。
lightdash dbt run
これをコマンドラインから実行するとmart_returns.sqlから以下のmart_returns.ymlが作成されます。
version: 2
models:
- name: mart_returns
columns:
- name: orderid
description: ""
meta:
dimension:
type: string
- name: return
description: ""
meta:
dimension:
type: string
あとはこれをデプロイするだけです。
> lightdash deploy --create
ちなみにdbt-osmosisを使うと同じことができますが、若干書き方が異なる気がします。
また、dbtではymlファイルがそのままdocumentとして使えますが、ここで生成されたymlは使えるのでしょうか?
使えました!感想
今回はLightdashを使ってデータを可視化してみました。dbtにはjaffle-shopと言うデータセットがあるので、それを使えばもっと早くできたかもですが、他のBIツールも使ってみたかったので敢えてスーパーストアのデータセットを使いました。
Lightdash自体はとても使いやすく、dbtとの相性の良さを感じました。
非エンジニアでもSQLを触らず(?)、ポチポチで可視化できるのは嬉しいですよね。
備忘録
インストール時に下記を実行しますが、なぜかdockerが無いと言われ…
> scripts\install.sh
手動でdockerを起動したら普通に使えました
> docker compose up -d