Snowflake

dbt Projects on Snowflake使ってみた

こんにちは、中村です。

ついにdbt Projects on Snowflakeが使えるようになりましたね。

というわけで、今回は既存のdbtプロジェクトをSnowflake上で編集・実行する方法を解説します!

目次

dbt Projects on Snowflakeについて

公式ドキュメントによると、主な機能は以下の通り

  • Web画面(Workspaces)で開発:Git連携もでき、ファイルをブラウザ上で編集。
  • SQLやCLIでも実行可能EXECUTE DBT PROJECTsnow dbt run などで dbt コマンドをSnowflakeから実行。
  • バージョン管理付き:自動でバージョンを管理。切り替えも可能。
  • スケジュール実行OK:Snowflake Tasksで定期実行できる。
  • ログや実行履歴が見える:Snowsightでモニタリングできる。

個人的にはスケジュール実行できるのはほかのツールを入れなくて済むので、とてもありがたいですね。

dbt Projects on Snowflakeを使ってみた

先述の通り今回は既存プロジェクトをSnowflakeのワークスペースで実行する方法について解説していきます。

今回もSnowflake公式ハンズオンを参考にしていますが、今回の解説では、ハンズオン資料とは異なる既存のdbtプロジェクトを使用します。

準備

まずはSnowflakeのワークスペースが使えるようにしましょう。

以下をSQLワークシートで実行

ALTER USER ユーザー名 SET DEFAULT_SECONDARY_ROLES = ('ALL');

次にGitリポジトリを見るためのAPI統合と、dbt deps用に外部統合の設定をします。

API統合はGitHubからPATを取得してSECRETを作成します。

GitHubからPATを取得する方法
GitHubにサインイン後、右上の自分のアイコンをクリック、Setting → Developer Setting → Personal access tokens → Fine-grained tokensを選択、Generate new tokensから作成します。

公式ドキュメント


以下をSQLワークシートで実行

use role sysadmin;

--WH、データベース、スキーマを設定
use warehouse NAKAMURA_WH; 
create database NAKAMURA_DB;
create schema if not exists dbt_test;
use schema NAKAMURA_DB.dbt_test;

--API統合の設定(既存プロジェクトの編集用)
-- SECRETの作成
CREATE OR REPLACE SECRET RDTEAM.dbt_test.nakamura_git_secret
  TYPE = password
  USERNAME = 'Nakamura*****' --GitHubのユーザー名
  PASSWORD = 'github_pat_**********************************';  --作成したGitHubのPAT

-- API統合の作成
CREATE OR REPLACE API INTEGRATION git_api_integration_nakamura
  API_PROVIDER = git_https_api
  API_ALLOWED_PREFIXES = ('https://github.com/Nakamura*****')
  ALLOWED_AUTHENTICATION_SECRETS = (nakamura_git_secret)
  ENABLED = TRUE;

GRANT USAGE ON INTEGRATION git_api_integration_nakamura TO ROLE NAKAMURA;
CREATE EXTERNAL ACCESS INTEGRATION my_ext_access_integration
  ALLOWED_NETWORK_RULES = (my_network_rule)
  ALLOWED_AUTHENTICATION_SECRETS = (my_secret)
  ENABLED = TRUE;

--外部統合の設定(dbt deps用)
CREATE OR REPLACE NETWORK RULE NAKAMURA_DB.dbt_test.dbt_network_rule
  MODE = EGRESS
  TYPE = HOST_PORT
  VALUE_LIST = ('hub.getdbt.com', 'codeload.github.com');  --package.ymlに記載した外部パッケージのドメインを入力

CREATE OR REPLACE EXTERNAL ACCESS INTEGRATION dbt_access_integration
  ALLOWED_NETWORK_RULES = (NAKAMURA_DB.dbt_test.dbt_network_rule)
  ENABLED = true;

GRANT USAGE ON INTEGRATION DBT_ACCESS_INTEGRATION TO ROLE NAKAMURA;

-- タスクを実行可能にする権限を付与(スケジュール実行用)
GRANT EXECUTE TASK ON ACCOUNT TO ROLE NAKAMURA;

また、今回僕はこちらのdbt公式リポジトリをフォークして使っています。手元に既存プロジェクトがない場合は、こちらを使えます。

実際に使ってみる

ワークスペース>ワークスペース名>ワークスペースの作成、Gitリポジトリからを選択

つづいて既存プロジェクトのリポジトリURLを入力し、先ほど作成したAPI統合を選択

プロジェクトが表示されましたね。

プロジェクトが表示されたら、まずはprofiles.ymlを作成しましょう。


既存プロジェクトの場合、Coreの場合ローカルの.dbt配下にあり、Cloudの場合SaaS自体で設定するので、プロジェクト内にはないはずです。

新規追加からprofiles.ymlを追加を選択

既存のprofiles.ymlをそのままコピペしましょう。

ここからは、コマンド実行をしていきます。

dbt Projects on SnowflakeはGUIでコマンドが実行できます!

各コマンドについて
・コンパイル
dbt形式(jinja形式)のSQLをコンパイルすることでリネージ(DAG)がわかる

・テスト
dbt testに相当
YAMLに書いたテストをすることができる

・依存関係
dbt depsに相当
外部パッケージを使っている場合、package.yamlに記載してdbt build/runの実行前にdbt depsをする必要がある

・表示
dbt showに相当

・リスト
dbt listに相当
dbt project内のリソースの一覧表示ができる

・実行
dbt runに相当
モデルを作成できる

・ビルド
dbt buildに相当
dbt seed/run/testを一括でできる

・シード
dbt seedに相当
seedsファイルにあるcsvをテーブル/ビュー化できる

・スナップショット
dbt snapshotに相当
時系列での履歴管理を目的としたテーブル(スナップショット)を作成・更新できる

・操作を実行
run-operationに相当
カスタムマクロ(macro)を実行するためのコマンド

プロジェクト内に外部パッケージを使用しているので、dbt depsを実行します。

実行に外部統合の選択が必要なので、先ほど作成した外部統合のdbt_access_integrationを選択して実行

次にコンパイルを実行します。

これでプロジェクト内のリネージを見ることができます。

続いてdbt buildをしていきます。

実行すると僕のプロジェクトでは下の様になりました。

ちなみに、dbt_project.ymlには以下の様に記載をしています。

テストの方も問題なくパスしているようですね。

無事実行できたのでデプロイしましょう!

右上の接続からdbtプロジェクトをデプロイを選択

デプロイするデータベースとスキーマを選択し、dbtプロジェクトの作成を選択、プロジェクト名を入力しましょう

これでデプロイ完了です。

スケジュールジョブの作成と実行

先ほどと同じように接続を選択し、スケジュールを作成を選択

スケジュールは毎時/毎日/毎週/毎月/カスタム(CRON形式)の中から選択できます。

コマンドは1つしか実行できないようなので、今回はbuildを選択しました。

スケジュールしたジョブの実行結果はモニタリング>dbtプロジェクトから確認できます

まとめ

今回は、既存のdbtプロジェクトを使って、dbt Projects on Snowflakeを実際に試してみました!

Snowflakeでもほかのエディター同様にdbtプロジェクトが使えるので、わざわざ画面を切り替える必要がなく、さくさく作業ができていいですね。

今回ご紹介したdbt Projects on Snowflakeと直接併用はできませんが、dbt Fusionや各種拡張機能も非常に便利です。今回の記事でdbtにも興味を持っていただけた方はぜひこちらの記事もご覧ください!

Cortex Analystを使ってみた前のページ

ピックアップ記事

  1. 最速で理解したい人のためのIT用語集

関連記事

  1. Data Clean Room

    SnowflakeのData Clean Roomを基礎から一番詳しく解説(1回目)

    こんにちは、喜田です。この記事では、複雑なSnowflake…

  2. Snowflake

    【速報】Snowflake Summit Opening Keynote 要約

    こちらの記事はSnowflake Summitで行われたキーノートス…

  3. Snowflake

    Snowflake Summit 2025 参加レポート【Day4】

    こんにちは、エクスチュアの黒岩です。Snowflake Su…

  4. Snowflake

    SnowPro Advanced: Architect 合格体験記

    こんにちは、エクスチュアの黒岩と申します。2年前に取得したS…

  5. Snowflake

    TROCCO入門

    こんにちは、エクスチュアの照沼です。みなさん、ELTツールと…

  6. Generative AI

    Snowflake の Copilot が優秀すぎる件について

    こんにちは、喜田です。いままでSnowflakeのライトユー…

カテゴリ
最近の記事
  1. dbt Projects on Snowflake使ってみた…
  2. Cortex Analystを使ってみた
  3. SnowflakeのAI_SQLと再帰CTEで遊ぶ(Snow…
  4. dbt Fusion使ってみた
  5. Manusを使ってみたうえでManusに感想ブログを書かせて…
  1. Snowflake

    [Snowflake Summit 2025] With Crunchy Dat…
  2. Snowflake

    Snowflakeとは?Data Cloud World Tour から見る20…
  3. Adobe Analytics

    Adobe Analyticsと「どこどこJP」のAPIを連携する
  4. Google Analytics 4

    過去取れていたリファラ情報が上手く取れなくなっている問題
  5. Tableau

    Tableau:累計ユニークカウント数を時系列グラフで表現する
PAGE TOP