dbt事始め① with Snowflake
概要
dbt Cloud を使ってみる。
を参考に、dbt Cloudを設定して、Snowflakeにつないで、dbt runするところまでやってみます。
料金プラン(Developer)の設定
以前、トライアルをやっていたのですが、トライアル期間が過ぎていたので、無料の「Developer」プランで登録しました。
50ドル/月のTeamプランをおすすめされますが、まぁ、Developerプランで
Projectの作成
projectが一つもないのか、Homeへ行くと、「Projectをつくろう!」な画面になるので、プロジェクトを作りまする。
Project Settings
プロジェクト名を入力。
オプションで「PROJECT SUBDIRECTORY」を設定できるけど・・・・まぁ、今回は飛ばします
Set Up a Database Connection (1)
Snowflake を選択してみます。
対応DWH(?)は以下の通り ※2022年2月21日現在
- PostgreSQL
- Redshift
- Snowflake
- BigQuery
- Apache Spark
- Databricks
Set Up a Database Connection (2) Snowflake
TYPE: snowflake
NAME : Snowflake_Sandbox (入力)
Snowflake Settings
dbt Cloudからのアクセスは、
- 52.45.144.63
- 54.81.134.249
- 52.22.161.231
からアクセスがあるので、必要とあれば、IP制限をするのがよさげ
例えば、Snowflake上のネットワークポリシーを作って制限する場合
use role accountadmin;
create network policy dbt_access allowed_ip_list = ('52.45.144.63','54.81.134.249','52.22.161.231');
alter user dbt_user set network_policy = dbt_access;
※厳密に上記のSQLを実行はしていないので、動かなかったらごめんなさいm(__)m
NAME | VALUE |
---|---|
ACCOUNT | $(ACCOUNT).ap-northeast-1.aws |
ROLE(OPTIONAL) | SYSADMIN (にしていいのかな・・・) |
DATABASE | TEST_GK (自分用に作ったDB) |
WAREHOUSE | COMPUTE_WH |
※SESSION KEEP ALIVE : dbt 0.16.0からの機能。Snowflakeセッションを通常の4時間のタイムアウト制限を超えて存続させます。
Development Credentials
認証方法は、
- ID/PASS
- KEY/Pair
※EnterprisePlanなら、SSOも対応らしい
セキュリティ的には、SSOが望ましいのだけど、ID/PASSは論外として、Key/Pairで行うのがまぁ妥当かな・・
キーペア認証については、こちらを参考にしました。
NAME | VALUE |
---|---|
AUTH METHOD | Key Pair |
PRIVATE KEY | -----BEGIN ENCRYPTED PRIVATE KEY----- ほげほげ -----END ENCRYPTED PRIVATE KEY----- |
PRIVATE KEY PASSPHASE | (入力) |
SCHMA | dbt_gtashiro |
TARGET NAME | default |
THREADS | 4 |
入力できたら、「Test」ボタンをクリック。
接続テストが通ったら 「Contiune」をクリック
Set Up a Repository
以下のリポジトリに接続して、dbtプロジェクトの設定を完了します。 GitHubを使用している場合は、GitHubでログインして、既存のdbtプロジェクトへのアクセスを承認できます。別のgitプロバイダーを使用している場合は、デプロイキーを使用してプロジェクトをインポートできます。デプロイキーを使用してリポジトリを承認する方法の詳細については、詳細なドキュメントを確認してください。
GitLabsがやってるManagedアカウントもできそうだけど、
Githubを使うことにします。
「Authoriz dbt Cloud」をクリックしたら、進んだけど・・・・・
GitHubとの連携 on profile
No repos found とでてきた。どうも、ProfileにGithubの情報を載せていなかったからの模様
で様々な連携の設定ができるのでこちらで行う「Configure integration in GitHub」 をクリックし、連携設定を行う。
どこに dbt Cloud をインストールするかきかれるので、個人アカウントでやってみる。
今回は「All repositories」を選択
で、Gitの「Confirm access」で失敗・・・うーむ
dbt Cloudがホスティングしているレポジトリでやってみることにします。
Add repository from : Managed
dbt Cloud managed repository : dbt_gtashiro
Welcome to tashiro_gaku on dbt Cloud!
Getting Started
dbtクラウドへようこそ!リポジトリと接続が設定されたので、dbtプロジェクトの構築を開始できます。 dbtプロジェクトを開発するためのヒント、コツ、およびベストプラクティスについては、必ずドキュメントを確認し、Discourseのディスカッションに参加してください。開始時に質問やコメントがある場合は、アプリケーションの右上隅にある吹き出しをクリックしてサポートに連絡できます。
「Start Developing」をクリックしてみます。
ローディングがはしって、開発できるように(30秒〜1分ぐらい)
サンプルのModelを実行してみる
左上の「 Initialize your project」をクリック
のようにProjectの雛形ができました。
設定ファイル( dbt_project.yml)の編集
name: 'gaku_new_project'
version: '1.0.0'
・・・・・・
models:
gaku_new_project:
# Applies to all files under models/example/
と変更。
Projectの実行
名前を変更しただけでとりあえず 'dbt run'
画面下部に、コマンドパネル的なものがあるのでそこで。
ちゃんとコマンドがリマインドされるので、使いやすいですね
実行ログが流れて、「Completed successfully」
Snowflake側で確認すると
- Schema「dbt_gtashiro」が作成された
- ↑のスキーマに、「my_first_dbt_model」テーブルが作られた
- ↑のスキーマに「my_second_dbt_model」ビューが作られた!
create or replace TRANSIENT TABLE TEST_GK.DBT_GTASHIRO.MY_FIRST_DBT_MODEL (
ID NUMBER(1,0)
);
create or replace view TEST_GK.DBT_GTASHIRO.MY_SECOND_DBT_MODEL(
ID
) as (
-- Use the `ref` function to select from other models
select *
from TEST_GK.dbt_gtashiro.my_first_dbt_model
where id = 1
);
プロジェクト内のファイルを更新・変更などをする方法は、
- branchを作成 (デフォルトでは、read-onlyのmainブランチ)
- 対象ファイルを編集
- 右上の 'save' をクリックして保存
- 左上の「commit」ボタンをクリック、コメントを入力
- 「merge to main」をクリック
- ブランチが「main read-only」になる。
続く
Discussion