🦁

Lightdash環境構築編

2024/04/30に公開

2024年ゴールデンウイークに触っておきたいツール第一弾ということで、Lightdash編やっていきます!!
前から触りたいって思ってたんですけど、他にやりたい事とか時間が無いやらでできずでした・・・
しかし!ようやくやれそうなので、まずは環境構築編からです!

環境構築をするにあたり参考にさせていただいたブログの紹介です。
https://zenn.dev/ikki/articles/aba98c1af9fea6
ikkiさんにはXでもお世話になっております。
本当に素晴らしい情報発信力に感謝いたします。ありがとうございます!!

環境構築編スタート!

Lightdashとは?

まずはLightdashの紹介をさせてください。
次のようなパワーがあります。ぱわぁー!!

  • 既存もしくは新規のdbtプロジェクトから、アナリストがメトリクスを作成し、Lightdash上でダッシュボードを作成できます
  • 本番環境にマージする前にサンドボックスで変更をテスト可能
  • また、ライブプレビューと開発環境を使用して、開発ワークフローをスピードアップ
  • 美しくインタラクティブなチャートとダッシュボードそして、直感的なチャートビルダーを使えば、数時間ではなく数分で作成できます
  • SlackやEメールとのネイティブな統合によりチームがどこにいても、インサイトを簡単に共有できます
  • Lightdashのユーザー数は無制限なので、チーム全体に最新情報を提供できます
  • 機密情報を隠したまま、適切なデータを適切なタイミングで表示します
  • 生のSQLにアクセスすることなく、誰でもデータを探索することができます
  • 実行可能なクエリや表示可能なコンテンツを制御できます

つまるところ、dbtで作成したプロジェクトをLightdashを使って可視化できちゃいます。

Lightdashをホスティングする環境

oracle cloudのFree tierインスタンスを利用します。
ディスクが20GBでメモリが1GBしかないんですけど、そこそこ快適に動作します。
ただ、環境構築時はちょっと時間がかかりましたが。。。
OSはUbuntu23.04です。

dbtプロジェクト

いつもおなじみのjaffle shopさんを利用させていただきます。

ディレクトリ構成

一応ディレクトリ構成を載せておきます。

ディレクトリ構成
|-- jaffle-shop
|   |-- jaffle-shop-classic
|   |   |-- LICENSE
|   |   |-- README.md
|   |   |-- dbt_packages
|   |   |-- dbt_project.yml
|   |   |-- etc
|   |   |-- logs
|   |   |-- models
|   |   |-- profiles.yml
|   |   |-- seeds
|   |   |-- snowflake.log
|   |   `-- target
|   `-- venv
|       |-- bin
|       |-- include
|       |-- lib
|       |-- lib64 -> lib
|       `-- pyvenv.cfg
`-- lightdash
    `-- lightdash
        |-- CHANGELOG.md
        |-- LICENSE
        |-- README.md
        |-- SECURITY.md
        |-- dangerfile.ts
        |-- docker
        |-- docker-compose.yml
        |-- dockerfile
        |-- dockerfile-prs
        |-- docs
        |-- examples
        |-- lightdash-pr.yml
        |-- lightdash.yml
        |-- package.json
        |-- packages
        |-- release.config.js
        |-- render.yaml
        |-- scripts
        |-- static
        |-- tsconfig.json
        `-- yarn.lock

Lightdash本体のセットアップ

インスタンスにSSHで接続して、以下コマンドを淡々と実行していきます。

$ sudo apt update -y && sudo apt upgrade -y
$ sudo git clone https://github.com/dbt-labs/jaffle-shop-classic.git # jaffle shopのdbtプロジェクトを用意
$ sudo vim profiles.yml # profiles.ymlの作成。Lightdashがサポートしているウェアハウスに対して接続情報を記載する。今回はSnowflake
$ sudo apt install python3.10-venv
$ python3 -m venv venv
$ source ./venv/bin/activate
$ pip install dbt-snowflake==1.6.6

ここまで進んだら、dbt debug、dbt seed、dbt runでSnowflakeへデプロイしておきます。

$ sudo apt install -y nodejs npm # lightdash/cliをインストールするのに、npmが必要なのでインストールする
$ sudo npm install n -g # npmのパッケージ管理nをインストール
$ sudo n stable # 最新版をインストール

nodeとnpmのバージョンを確認しておく

$ node -v
v20.12.2
$ npm -v
10.5.0

lightdash/cliのインストール

$ sudo npm install -g @lightdash/cli

LightdashのGitをcloneする

$ mkdir lightdash
$ cd lightdash/
$ sudo git clone https://github.com/lightdash/lightdash

Lightdash本体をインストールする

$ cd lightdash/
$ sudo ./scripts/install.sh

install.shを実行すると、インストール案内が始まる。
セットアップ方法は2つあるので、すでにdbtプロジェクトが存在しているので1を選択する。

? Thank you for trying out Lightdash!
Detecting your OS ...
? Detected OS: ubuntu
? Please enter how you want to setup Lightdash
1) Fast install [default]
2) Custom install
??  Enter your preference (1/2):1 # 1を選択
? You have chosen: fast setup

ちなみに、この段階でインスタンスにDocker環境が無いとインストールしてくれます。
最終的に以下がコンソールに表示されていればOKです。

++++++++++++++++++ SUCCESS ++++++++++++++++++++++

? Your installation is complete!

? Your frontend is running on http://localhost:8080

??  To restart Lightdash: docker-compose -f docker-compose.yml start
??  To stop Lightdash: docker-compose -f docker-compose.yml stop -v
??  To bring down Lightdash and clean volumes: docker-compose -f docker-compose.yml down -v

+++++++++++++++++++++++++++++++++++++++++++++++++

? Need help Getting Started?
Join us on Slack https://join.slack.com/t/lightdash-community/shared_invite/zt-2ehqnrvqt-LbCq7cUSFHAzEj_wMuxg4A


? Thank you!

http://localhost:8080 へアクセスすると、サインアップの画面に遷移するので適当にアカウントを作成する。

サインアップ後、新しいプロジェクトへの接続を作成する。
今回用意したdbtプロジェクトはSnowflakeを使っているので、Snowflakeを選択する。

dbtプロジェクトのアップロード方法を選択する。
今回はUsing your CLIを選択する。

何やら準備が必要なようです。
ステップ1のLightdash CLIはインストール済みなので、スキップします。

ステップ2のlightdash cliからLightdashへログインするコマンドを実行します。

$ lightdash login http://localhost:8080 --token 5fdc7315b432a5*********************

ステップ3のdbtプロジェクトをLightdashへデプロイするコマンドを実行します。

ポイント2を解説
lightdash deploy --createを実行すると、以下エラーが出ちゃいました。
'/home/ubuntu/.dbt'のPATHが無いって怒られました。
今回profiles.ymlはdbtプロジェクト内に配置しています。
これだと認識してくれないのでしょうか??

$ lightdash deploy --create
Error executing 'dbt ls':
  Command failed with exit code 2: dbt ls --project-dir . --profiles-dir /home/ubuntu/.dbt --output json --output-keys unique_id --quiet
Usage: dbt ls [OPTIONS]
Try 'dbt ls -h' for help.

Error: Invalid value for '--profiles-dir': Path '/home/ubuntu/.dbt' does not exist.
Ensure you're on the latest patch version. '--use-dbt-list' is true by default; if you encounter issues, try using '--use-dbt-list=false

なので、オプションの--profileを使って、profiles.ymlを指定してみました。
エラーの内容は変わりません。。。

$ lightdash deploy --create --profile profiles.yml --project-dir ./
Error executing 'dbt ls':
  Command failed with exit code 2: dbt ls --project-dir ./ --profiles-dir /home/ubuntu/.dbt --profile profiles.yml --output json --output-keys unique_id --quiet
Usage: dbt ls [OPTIONS]
Try 'dbt ls -h' for help.

Error: Invalid value for '--profiles-dir': Path '/home/ubuntu/.dbt' does not exist.
Ensure you're on the latest patch version. '--use-dbt-list' is true by default; if you encounter issues, try using '--use-dbt-list=false

仕方ないので、指定のPATHを作成し、そこにprofiles.ymlを配置します。

$ mkdir /home/ubuntu/.dbt
$ cp -p profiles.yml /home/ubuntu/.dbt/

さいど、lightdash deploy --create実行してみます。
無事実行できました。

実行ログ
$ lightdash deploy --create
{"level":"INFO","message":"[2:01:29.034 AM]: Trying to initialize Easy Logging"}
{"level":"INFO","message":"[2:01:29.119 AM]: Trying to initialize Easy Logging"}
{"level":"INFO","message":"[2:01:29.120 AM]: Trying to initialize Easy Logging"}
{"level":"INFO","message":"[2:01:29.120 AM]: Trying to initialize Easy Logging"}
{"level":"INFO","message":"[2:01:29.121 AM]: Trying to initialize Easy Logging"}
{"level":"INFO","message":"[2:01:29.125 AM]: No client config file found in default directories"}
{"level":"INFO","message":"[2:01:29.126 AM]: Easy Logging is disabled as no config has been found"}
{"level":"INFO","message":"[2:01:29.211 AM]: No client config file found in default directories"}
{"level":"INFO","message":"[2:01:29.212 AM]: Easy Logging is disabled as no config has been found"}
{"level":"INFO","message":"[2:01:29.216 AM]: No client config file found in default directories"}
{"level":"INFO","message":"[2:01:29.216 AM]: Easy Logging is disabled as no config has been found"}
{"level":"INFO","message":"[2:01:29.220 AM]: No client config file found in default directories"}
{"level":"INFO","message":"[2:01:29.220 AM]: Easy Logging is disabled as no config has been found"}
{"level":"INFO","message":"[2:01:29.224 AM]: No client config file found in default directories"}
{"level":"INFO","message":"[2:01:29.224 AM]: Easy Logging is disabled as no config has been found"}

- SUCCESS> customers
- SUCCESS> orders
- SUCCESS> stg_orders
- SUCCESS> stg_customers
- SUCCESS> stg_payments

Compiled 5 explores, SUCCESS=5 ERRORS=0

? Add a project name or press enter to use the default: [Jaffle shop]  yes
?   Creating new project yes
? Do you confirm Lightdash can store your warehouse credentials so you can run queries in Lightdash? Yes #間違えてYesって入れちゃったので、プロジェクト名がYesになってしまってます。。。。失敗した
? Do you want to save this answer for next time? Yes
?   New project yes created

Successfully deployed project:

      ?? http://localhost:8080/createProject/cli?projectUuid=233dd332-3bb4-4872-ac11-79ad123f51f7

Done ?

ブラウザからLightdashへアクセスしてみると、以下のように画面に表示されます。

以上で、Lightdashの環境構築は終了です。
次回、Lightdashの本体のビジュアライゼーションに触れていきたいです。

Discussion