今回の課題
dbt coreを使って、SnowflakeのデータをETLできるように環境構築を行う。
環境構築する際に時間がかかったので、進めた手順を記録することにした。
進めた手順
進めた手順は以下の通り。
※手順1)
と2)
はつまずかなかったので、
他の方が投稿されている記事を引用する形で、簡単に書きました。
1)Hemebrewでdbtをインストール
添付の記事を参考にしながら、以下の通りに進めた。
-
$ brew install dbt-snowflake
コマンドでdbtをインストール - インストールしたら
$ dbt --version
でdbtがインストールされているか確認
└dbtのバージョンについての情報が返ってくれば、インストールされている。
2)dbtを最新バージョンにアップデート
1)
で$ dbt --version
でdbtがインストールされているか確認したところ、
古いバージョンがインストールされていることが分かった。
念のため以下の記事のInstalling with Homebrew
という見出しの手順を参考に、
dbtの最新バージョンをインストールしておいた。
3)profiles.ymlを作成する
profiles.yml
とは、dbtの接続先(データベースやウェアハウス、スキーマ)についての設定を記述しておくファイルのこと。
※下記の公式ドキュメントにテンプレートが用意されている。
dbtをCLIで使用する場合profiles.yml
ファイルが必要なようなので、
以下の手順でprofiles.yml
を用意した。
3)-1.ホームディレクトリに/.dbt
ディレクトリを作成する
以下のコマンドを実行して、ローカルのホームディレクトリに/.dbt
ディレクトリを作成する
$ touch ~/.dbt
3)-2./.dbt
ディレクトリ内にprofiles.yml
を作成する。
以下のコマンドを実行して/.dbt
ディレクトリにprofiles.yml
を作成する。
$ touch ~/.dbt/profiles.yml
3)-3.profiles.yml
に記述を行う。
接続するDWHの情報を入力する。
- 以下のように複数のoutputs先を設定しておくことも可能。
-
dbt run
を実行すると、target
に設定しているdev
の方に記載のDWHに出力される。 -
dbt run --target dev2
を実行すると、dev2
の方に記載のDWHに出力される。
-
my-project:
target: dev
outputs:
dev:
account: *******.ap-northeast-1.aws # '[アカウント名].[リージョン名].aws'という形式で記述する。
database: *******
password: *******
role: *******
schema: *******
type: snowflake
user: ******* # Snowflakeにサインインする時に入力する'ユーザー名'と同じ
warehouse: *******
dev2:
account: *******.ap-northeast-1.aws
database: *******
password: *******
role: *******
schema: *******
type: snowflake
user: *******
warehouse: *******
4)dbtプロジェクトを作成する
以下のコマンドを打って、~/.dbt
ディレクトリにmy_project
を作成する。
dbt init [プロジェクト名]
はprofiles.ymlの接続情報を元に、プロジェクトを作成してくれる。
$ dbt init my_project
5)dbt_project.ymlを作成
dbt_profiles.yml
ファイルはプロジェクトの設定を記述するファイルのこと。
プロジェクト名やバージョン、モデルの配置先などを記述する。
※以下の記事にdbt_project.yml
の各タグについて書かれている。
手順としてはまず以下のコマンドで、~/.dbt/my_project
配下に/dbt_project.yml
を作成し、
$ touch ~/.dbt/my_project/dbt_project.yml
dbt_project.yml
に以下の通りに記述をした。
name: my_project # プロジェクト名をつける。プロジェクト名は小文字とアンダースコアのみ使える。
version: '1.5.0'
profile: my-project # DWの接続設定名を指定する。profiles.ymlファイルに記載しているプロファイル名を指定する。
# モデルやスナップショットのコードのパスを指定しておく項目
source-paths: ["models"] # source-pathsは、models/ディレクトリ
analysis-paths: ["analysis"] # analysis-pathsは、analysis/ディレクトリ
test-paths: ["tests"] # test-pathsは、tests/ディレクトリ
data-paths: ["data"] # data-pathsは、data/ディレクトリ
macro-paths: ["macros"] # macro-pathsは、macros/ディレクトリ
snapshot-paths: ["snapshots"] # snapshot-pathsは、snapshots/ディレクトリにあることを意味している。
target-path: "target" # コンパイルしたSQLファイルをtarget/ディレクトリに出力することを意味している
clean-targets: [target, dbt_packages] # dbt cleanコマンドを実行したときに削除するディレクトリを指定する項目。
# プロジェクト内のモデルをどういった形式(テーブルなのかビューなのかなど)で出力するのか指定しておく項目
models:
my_project:
example:
materialized: view
6)dbt debug
で接続テスト
最後に$ dbt debug
を実行して、dbtからSnowflakeへの接続が成功するか確認をした。
a.yamaguchi@ayamaguchiMacBook-Air .dbt % dbt debug
07:36:42 Running with dbt=1.5.0
07:36:42 dbt version: 1.5.0
07:36:42 python version: 3.9.16
07:36:42 python path: /opt/homebrew/Cellar/dbt-snowflake@1.5.0/1.5.0/libexec/bin/python3.9
07:36:42 os info: macOS-13.3.1-arm64-arm-64bit
07:36:42 Using profiles.yml file at /Users/a.yamaguchi/.dbt/profiles.yml
07:36:42 Using dbt_project.yml file at /Users/a.yamaguchi/.dbt/dbt_project.yml
07:36:42 Configuration:
07:36:42 profiles.yml file [OK found and valid]
07:36:42 dbt_project.yml file [OK found and valid]
07:36:42 Required dependencies:
07:36:42 - git [OK found]
07:36:42 Connection:
07:36:42 account: *******.ap-northeast-1.aws
07:36:42 user: *******
07:36:42 database: *******
07:36:42 schema: *******
07:36:42 warehouse: *******
07:36:42 role: *******
07:36:42 client_session_keep_alive: False
07:36:42 query_tag: None
07:36:43 Connection test: [OK connection ok]
07:36:43 All checks passed!
成功しました!
まとめ
以上のような手順で進めることで、CLIでdbtを操作してSnowflakeのデータをETLすることができるように設定できた。
profiles.yml
やdbt_project.yml
ファイルについての理解も深めることができた。