dbt事始め① with Snowflake

2022/02/22に公開

概要

https://dev.classmethod.jp/articles/dbt-tutorial/
を参考に、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で行うのがまぁ妥当かな・・

https://dev.classmethod.jp/articles/snowflake-key-pair-auth/
キーペア認証については、こちらを参考にしました。

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の情報を載せていなかったからの模様
https://cloud.getdbt.com/#/profile/integrations/
で様々な連携の設定ができるのでこちらで行う

「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