Lightdash触ってみた

# はじめに
12/15(日)にちゅらデータのデータエンジニアの人たちが集まり、オンライン合宿を行いました。
今回のオンライン合宿は各自でやりたいことに取り組み、最後にLTで発表する流れでした。
私はBIツール周りを色々触ってみようと思いました。
最終的には時間の都合でLightdashしか触れなかったのでそちらを報告します！

# Lightdashとは
https://www.lightdash.com/

Lightdashは、dbtで定義したファイルをそのまま可視化することができるツールです。
LightdashにはOSS版とクラウド版がありますが、今回はOSS版を使ってみました。
ちなみにクラウド版の場合、21日のフリートライアルがありますが、スターターでも$800/月くらいのサービスになります。

:::note info
今回私が実施した使用環境
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](https://career-5.com/download/%E3%82%B5%E3%83%B3%E3%83%97%E3%83%AB-%E3%82%B9%E3%83%BC%E3%83%91%E3%83%BC%E3%82%B9%E3%83%88%E3%82%A2/)はここからダウンロードして、注文、返品、関係者のシートがあるため、それぞれcsvで保存しなおしました。([こちらのリポジトリ](https://github.com/Takayuki0617/dbt_bi)のdatasouceフォルダにあります)
その後、Snowsightにて手動で取り込みました。（下記のキャプチャの場所で実行）
<img width="400" alt="スクリーンショット 2024-12-15 17.51.57.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3361865/8021db98-86fb-87c5-c09a-1b54ae84d45e.png">

<img width="400" alt="スクリーンショット 2024-12-15 17.53.59.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3361865/187d8c48-9ac1-01ad-237d-5dd8fe03a938.png">

# dbtの準備
[こちらのリポジトリ](https://github.com/Takayuki0617/dbt_bi)のソースコードを参考にしてください。
.env.sampleにある環境変数を各自の環境に合わせていただければ動くはずです！

# Lightdashのセットアップ
ここは弊社のkei忍者が書いていましたので参考にしてください。(dbtの箇所は不要です)
[Lightdash と Snowflake を使ってデータを可視化する方法](https://zenn.dev/churadata/articles/bd107ef0377cbb)

最終的にはLightdashを起動して下記をdbtのプロジェクトフォルダで実行できればOK
```
> lightdash deploy --create
```

# Lightdashの便利だと思ったこと
### 日付型は自動でDay、Week、Month、Yearで指標にできる
<img width="400" alt="スクリーンショット 2024-12-16 11.17.54.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3361865/85d64f2f-9443-5d4a-0f1a-a74d25b54732.png">

上記キャプチャのOrderdateですが日付型のカラムになります。こんな感じで日付の粒度が分割されるので、月単位の売り上げ、年単位の売り上げ、とかが簡単にできちゃいます。

ちなみに左のDimensionsからOrderdate-MonthとSales(売上金額)を選択して、[Run query]を押すとこんなチャートが作成されます。が、Salesがサマリーしていないので、下部にあるSQLを変更してあげます。
<img widhth="400" alt ="スクリーンショット 2024-12-16 11.23.34.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3361865/64de7f6f-9ad8-0ff7-59bb-1b3bd121f35f.png">

```
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]すると狙った通り月毎の売上高のチャートが表示されました。

<img widhth="400" alt ="スクリーンショット 2024-12-16 11.28.31.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3361865/b29439e0-2af7-bf37-3554-e72e6763fecc.png">



### 自動で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は使えるのでしょうか？

<img width="800" alt="スクリーンショット 2024-12-15 18.02.00.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3361865/89b1df14-8a88-e717-ae0f-917a453ceec6.png">
使えました！

# 感想
今回はLightdashを使ってデータを可視化してみました。dbtにはjaffle-shopと言うデータセットがあるので、それを使えばもっと早くできたかもですが、他のBIツールも使ってみたかったので敢えてスーパーストアのデータセットを使いました。

Lightdash自体はとても使いやすく、dbtとの相性の良さを感じました。
非エンジニアでもSQLを触らず(?)、ポチポチで可視化できるのは嬉しいですよね。

## 備忘録
インストール時に下記を実行しますが、なぜかdockerが無いと言われ…
```
> scripts\install.sh
```
手動でdockerを起動したら普通に使えました
```
> docker compose up -d
```