3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

🔰QuickStart🔰dbtでSnowflakeのデータを"T"してみる

Posted at

はじめに

公式ドキュメントであるQuickstart for dbt Cloud and Snowflakeをやってみたdbt初心者です。
ドキュメントに沿って進めていくうちに、先に知っておけばよかったな~と思った事などをメモしています。
dbt初心者の助けになるはず!

クイックスタートで出来ること

ドキュメント通りですが以下のようにSnowflakeとの接続からdbtのモデル作成、ジョブ実行まで一連の流れを体験できます。

・新しいSnowflakeワークシートを作成します。
・サンプルデータをSnowflakeアカウントにロードします。
・dbt CloudをSnowflakeに接続します。
・サンプルクエリをdbtプロジェクトのモデルにします。
・dbtプロジェクトにソースを追加します。
・モデルにテストを追加します。
・モデルを文書化します。
・ジョブの実行をスケジュールします。

1.事前準備

・Snowflakeトライアルアカウント作成

Snowflake無料トライアル環境の期限は30日です。

・dbtアカウント作成

今回はdbt Cloudを使用します。プランは「Developer」を選択しました。
「Developer」プランでアカウントを作成後14日間は「Team」プランのトライアル環境になるようです。

「Developer」プランでAPIを使う場合の注意点
「Developer」プランにはAPIアクセスの機能を持ち合わせていない為、「Team」プランのトライアル期間(14日)を過ぎるとAPIを使用できません。

2.Snowflakeのワークシートの作成は「+」をクリックしたら完了ですので割愛します

3.データのロード(Snowflakeの準備)

必要なものを作成
・ウェアハウス
 dbtで作成したモデルを実行するウェアハウスを作成
・データベース
 RAWデータ用とdbt開発用に分けて作成
・スキーマ、テーブル
 RAWデータ用のみ作成

Snowflakeワークシートの使い方について
ドキュメントでは以下のように、実行後SQLのコードは削除するよう記載されていますが、ワークシート内の選択箇所のみ実行出来るため削除しなくても良いです!
First, delete all contents (empty) in the Editor of the Snowflake worksheet. Then, run this SQL command to create the customer table:

image.png

サンプルデータをロードする
S3に格納されているサンプルデータをロードします。ロードにはCOPYコマンドを使用しています。実行後はきちんとデータが入っているか確認しておくことをオススメします。

・顧客情報
image.png

・注文情報
image.png

・支払情報
image.png

4.Snowflakeとdbtを接続する

接続する方法は2種類あります。
今回はdbt Cloudから手動で接続する Connect manuallyにしました。

アカウント識別子について
 鎖マークを選択しアカウントURLをコピー以下xxxの部分です
 https://XXXXXXXX.snowflakecomputing.com
 image.png

ほか認証情報を入力し完了です!

image.png

5.dbtCloudのリポジトリの設定

ドキュメントの通りです。ここまでくれば準備は完了です!:tada:

image.png

6.dbtで開発をはじめよう

:package:はじめに知っておくといいこと

 ・モデル=SQLファイルのこと
 ・開発ページは「Develop」
 ・モデル(ファイル)の名前には拡張子までつける (yml,sqlなど拡張子で判断)
 ・実行はdbt run
 ・指定したモデルだけ実行したい場合はdbt run --select モデル名.sql
 ・SQLのコードの文末に「;」を付けない

image.png

7.はじめてのモデル作成

ブランチ作成
バージョン管理のためにブランチをします。ブランチ名はadd-customers-modelのように、これからどんな対応を入れるのかを記載します。
対応をひと言で説明するのが難しい場合や、案件ではjiraのチケット番号と紐づける等の工夫をするみたいです。

image.png

モデル作成時に助かる便利ポイント:bulb:

プレビュー機能があります!モデル内の一部を選択し実行することでデータを確認できます。当たり前かもしれませんが、SnowflakeのGUIを使用せずdbtだけでデータマート開発が出来るなんて、感動 :sob:

image.png

8.モデルのmaterializedを変更

materializedについて

モデルで何を作るのか決めることが出来ます。
詳細については別の記事を投稿しようと思うのでここでは紹介のみとします。

種類
 ・table
 ・view
 ・incremental
 ・ephemeral 
 ・materialized view

設定方法
materializedの設定方法は2種類あります。
①ymlファイルで一括設定

image.png

②モデルごとに指定
モデルによってmaterializedを変える場合はこちらが良さそうですね:star2:

image.png

dbt runをしてみるとSnowflake上に成果物が出来ているはずです!

9.exampleモデルを削除します。ドキュメント通りなので割愛します。

10 モデルに依存関係を持たせよう

stg_cusomersstg_ordersを参照したcusomersモデルを作成します。

image.png

モデルを参照する場合はref()を使用します。cusomersモデルは以下のようになります。

customers.sql
with customers as (

    select * from {{ ref('stg_customers') }}

),

orders as (

    select * from {{ ref('stg_orders') }}

),

customer_orders as (

    select
        customer_id,
        ...

11 データソースをsourceとして認識させる

これまではfrom句でテーブルを直接指定していましたが source関数を使ってみます。

手順
①ymlファイルにデータソースとなるテーブルを定義
②from句を変更する from {{ source('スキーマ名', 'テーブル名') }}

便利ポイント:bulb:
リネージュ機能を確認すると依存関係も一目で確認できます:raised_hands:

image.png

これによりモデルがSnowlfakeのどのテーブルから作られているのかが分かるようになります:yum: 便利!

実行結果をSnowflakeでも確認してみる

Snowflakeでテーブルcustomersが作成されていることを確認できました:clap:

image.png

12.テスト

modelディレクトリ配下にschema.ymlファイルを作成しテストを行います。
各テーブルのカラムに対してテスト観点を記載します。

.yml
version: 2

models:
  - name: customers
    columns:
      - name: customer_id
        tests:
          - unique
          - not_null

  - name: stg_customers
    columns:
      - name: customer_id
        tests:
          - unique
          - not_null

:point_up:ここまでドキュメント通りに進めていたはずがテストでエラーになりました
(わたしのミスです:girl_tone5:

image.png

エラーメッセージを頼りにSnowflakeを見るとmy_first_dbt_modelidがnullになっていました。

image.png

前項9で削除したはずのexampleモデルが削除できていなかった事が原因でした。解決:fist:
ということでmodel/にある全てのモデルがテスト対象になります。

再テスト
ymlファイルで定義したテスト観点ごとに確認をしていることが分かります。

image.png

13,14はドキュメントの通りに進めました。

15.dbtをデプロイする(ジョブを作ろう)

デプロイ環境を作成したうえでジョブを作成し実行します。

以下がジョブを実行した結果です!成功!:angel_tone2:

image.png

最後に所感

dbtは"T"に集中できる環境だと感じました。
データマート開発時に感じるちょっとした嫌なことが解消されているような気がします:dancers:

はじめはdbtって何が出来るの?何がすごいの?と思っていましたが、触っていくうちにdbtの便利さに気付き感動していました:sob: 本当に奥が深くまだまだ分からない事ばかりです。

dbtが私たちの代わりにやってくれたことを実際にSnowflakeではどのようなクエリとして実行されていたのか等、検証した内容を少しずつ投稿していこうと思います。

3
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?