[新機能]Snowflakeアカウント内でdbtの開発・実行ができる「dbt Projects on Snowflake」がパブリックプレビューとなりました

[新機能]Snowflakeアカウント内でdbtの開発・実行ができる「dbt Projects on Snowflake」がパブリックプレビューとなりました

Clock Icon2025.06.26

さがらです。

私も以下の@mmotohasさんの投稿で知ったのですが、Snowflakeアカウント内でdbtの開発・実行ができる「dbt Projects on Snowflake」がパブリックプレビューとなりました!

https://x.com/mmotohas/status/1938050501352034447

早速試してみたので、その内容をまとめてみます。

dbt Projectsとは

改めてdbt Projects on Snowflakeですが、dbtはOSS版をdbt Coreとして提供しており、そのdbt CoreをSnowflakeのプラットフォーム上で直接、作成・実行・管理できるようにする機能です。

(以下は公式ドキュメントへのリンクですが、2025/6/26時点ではLIMITEDACCESSのリンクしかありませんでした。)

https://docs.snowflake.com/LIMITEDACCESS/dbt-projects-on-snowflake?_fsi=JchN3RQh&_fsi=JchN3RQh

どういった機能かを知るには、以下の動画が参考になると思います。

https://www.youtube.com/watch?v=w7C7OkmYPFs

注意点

上述の公式ドキュメントからの引用ですが、2025/6/26時点では以下の制限があります。(最新情報は公式ドキュメントを確認するよう、お願いいたします。)

  • dbt Coreのプロジェクトのみサポートしているため、dbt Cloudで開発したリポジトリを使う場合にはprofiles.ymlの作成などが必要です。
  • Gitパッケージの制限: packages.ymlファイルでGitリポジトリを直接指定する形式のパッケージはサポートされていません。
  • ファイル数制限: 1つのdbtプロジェクトに含めることができるファイルは20,000個までです。
  • 共有不可: dbt Projects on SnowflakeはWorkspaceで動作しますが、Workspaceは個人用データベースに作成されるため、他ユーザーとの共有はできません。
  • 設定: Gitリポジトリとの連携や外部パッケージの利用には、API統合や外部アクセス統合といった事前の設定が必要です。

また、今後改善予定の機能として、以下についても言及があります。

  • 一部コマンドの未サポート: Workspace内で実行できるdbtコマンドはまだ限定的です(run, testなどはサポート済み)。
  • UIの未実装: dbtの実行履歴の表示や、SnowsightのUIを使った実行スケジュール設定は、今後のアップデートで対応予定です。現状、スケジューリングはSQLでSnowflakeタスクを作成する必要があります。
  • パフォーマンス改善: dbtプロセスの起動時間を大幅に(20〜40倍)短縮するパフォーマンス改善が予定されています。

試す内容

新規でWorkspace上でdbt Projectsを作成し、dbt Projects on Snowflakeでどのような事ができるかを確認してみます。

検証環境

検証環境は、SnowflakeのAWS東京リージョンの、非トライアルアカウントになります。

セカンダリロールの有効化

dbt ProjectsはWorkspace機能を使うのですが、個々のユーザに紐づくpersonal database上にWorkspaceは作成されます。

以下のクエリを使用するユーザー名に書き換えて実行して、セカンダリロールを有効化します。

ALTER USER my_user SET DEFAULT_SECONDARY_ROLES = ('ALL');

検証用のデータベース・スキーマの作成

以下のクエリを実行して、検証用のデータベース・スキーマを作成しておきます。

USE ROLE SYSADMIN;
CREATE DATABASE SAGARA_DBT_ON_SNOWFLAKE_FIRST_TIME;
GRANT OWNERSHIP ON DATABASE SAGARA_DBT_ON_SNOWFLAKE_FIRST_TIME TO ROLE SAGARA_ADMIN_ROLE;

USE ROLE SAGARA_ADMIN_ROLE;
USE DATABASE SAGARA_DBT_ON_SNOWFLAKE_FIRST_TIME;
CREATE SCHEMA DBT_SSAGARA; -- 開発用
CREATE SCHEMA PRODUCTION; -- 本番用

Workspaceを起動し、dbt Projectsをセットアップ

画面左のメニューから、Workspaceを起動します。

2025-06-26_13h44_42

その後、一番左上の項目をクリックし、Create Workspaceから+ Newを押します。

2025-06-26_13h55_07

任意の名称をつけて、Workspaceを作成します。

2025-06-26_13h56_15

その後、+ Add Newを押し、dbt Projectを押します。

2025-06-26_13h59_22

Project Name、ロール、ウェアハウス、データベース、スキーマを入力します。ここでのデータベースとスキーマは、「dbtで開発時のテスト実行したときの出力先となるデータベースとスキーマ」をいれます。

2025-06-26_14h15_21

すると、下図のようにdbtに必要な各フォルダ・ファイルが自動で作成されました!profiles.ymlでは、先程入力したロール、ウェアハウス、データベース、スキーマが入っています。

2025-06-26_14h17_26

サンプルモデルのリネージを表示してみる

dbt Projectsのセットアップ時、modelsフォルダにはデフォルトでmy_first_dbt_model.sqlmy_second_dbt_model.sqlが入っています。

2025-06-26_14h21_09

2025-06-26_14h23_39

このサンプルモデル同士のデータのリネージを確認するため、右上がCompileになっていることを確認した上で、横のボタンを押します。

2025-06-26_14h30_06

すると、WorkspaceのOutput欄にてログが表示されます。

2025-06-26_14h30_47

このあと、ブラウザを更新するとDAG欄が追加され、リネージを見ることができます。(私が試したときは、ブラウザを更新しないとDAG欄が追加されませんでした。)

2025-06-26_14h32_44

サンプルモデルをビルドしてみる

先ほどリネージを確認したサンプルモデルについてSnowflakeに反映させるため、一度ビルドを行ってみます。

右上のCompileとなっているところを、Buildに変更し、右側のボタンを押します。

2025-06-26_14h25_14

すると、WorkspaceのOutput欄にてログが表示されます。

2025-06-26_14h26_39

この上で、作成したデータべース・スキーマを見てみると、サンプルのモデルがビルドされて反映されていることがわかります。

2025-06-26_14h28_11

本番用のスキーマのprofileを追加する

このあと実際にdbt Projects on SnowflakeをSnowflakeのタスクとして実行するために、本番用のスキーマに対するprofileを追加しておきます。

今回は下図赤枠のように追加しておきました。これで、Workspace上部のProfileから、prodも選択できるようになりました。

2025-06-26_14h44_19

WorkspaceからSnowflakeアカウントへdbt Projectsをデプロイする

dbt Projects on Snowflakeでは、対象のdbt Projectsをタスクで実行するために、Snowflakeアカウントにデプロイする必要があります。

右上のConnectからDeploy dbt projectを押します。

2025-06-26_14h45_14

任意のデータベースとスキーマを指定し、Select or create dbt projectではCreate dbt projectを選択し、任意の名称をいれます。

2025-06-26_14h49_03

すると、下図のように表示されます。

2025-06-26_14h49_53

2025-06-26_14h50_10

実際にデプロイ先のスキーマを見てみると、指定した名前でdbt Projectsがデプロイされています。

2025-06-26_14h52_01

デプロイしたdbt Projectsを元にタスクを作成・実行

デプロイしたdbt Projectsを元にタスクを作成・実行してみます。

任意のワークシートを立ち上げ、以下のクエリを実行してタスクとして作成します。ポイントは、--target prodとすることで、本番用のスキーマに対して操作が行われるようにしています。

CREATE OR ALTER TASK sagara_dbt_on_snowflake_first_time.production.dbt_execute
  WAREHOUSE = sagara_dbt_prod_wh
  SCHEDULE = 'USING CRON 0 9 1 1 * Asia/Tokyo'
AS
EXECUTE DBT PROJECT sagara_dbt_on_snowflake_first_time.production.sagara_dbt_deployment_first_time args='build --target prod';

このあと、以下のクエリを実行してタスクを手動実行します。

EXECUTE TASK sagara_dbt_on_snowflake_first_time.production.dbt_execute;

タスクが無事に完了すると、本番用のスキーマに対してテーブルとビューが作成されていることがわかります。

2025-06-26_15h02_36

最後に

Snowflakeアカウント内でdbtの開発・実行ができる「dbt Projects on Snowflake」がパブリックプレビューとなったので、早速試してみました!

dbt Cloudに慣れている私ですが、特に問題なく開発できました。Snowflakeアカウント内でdbtの開発~本番実行が全て完結するというのが凄いですね…

今回はGitHubと連携しませんでしたが、今度はGitHubと連携した場合にどのような開発プロセスとなるかも検証してみたいと思います!

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.