Snowflakeでのdbtプロジェクト

dbt Core は、SQL 変換の定義、テスト、デプロイに使用できるオープンソースのデータ変換ツールとフレームワークです。|sf-dbt|では、なじみのあるSnowflakeの機能を使用して、dbt Coreプロジェクトを作成、編集、テスト、実行、管理できます。dbtプロジェクト は、dbt_project.yml ファイルと、モデルやソースなどのdbtアセットを定義するファイルのセットを含むディレクトリです。

Snowsight の ワークスペース を使用して、dbtプロジェクトファイルとディレクトリを操作した後、プロジェクトをスキーマレベルの DBTPROJECT オブジェクトとしてデプロイできます。さらに、SQL を使用して、dbtプロジェクトオブジェクトを操作すること、Snowflake CLI コマンド を使用して CI/CD ワークフローに展開と実行を統合すること、タスク を使用してdbtプロジェクトの実行をスケジュールおよびオーケストレーションすること、Snowflakeモニタリングツール を使用してプロジェクトの実行を検査、管理、調整することも可能です。

|sf-dbt|のワークスペースを使用

Snowsight のワークスペースは、Gitリポジトリに接続して同期できるdbtプロジェクト用にウェブベースの統合開発環境(IDE)を提供します。dbt Projects on Snowflake の各ワークスペースは、ファイルやフォルダーの整理方法に応じて、単一のdbtプロジェクトまたは複数のdbtプロジェクトを表すことができます。

dbt Projects on Snowflake のワークスペースを使用すれば、Snowflakeで直接dbtプロジェクトを可視化、テスト、実行することができます。ワークスペースをSnowflakeの dbtプロジェクトオブジェクト に接続することもできるため、ワークスペース内からオブジェクトを作成および更新することもできます。ワークスペースは、新しいdbtプロジェクトを初期化(またはスキャホールド)する簡単な方法も提供します。これにより、dbt_project.yml ファイルなど、dbtプロジェクトに必要なファイルとディレクトリが作成されます。

dbtプロジェクトのサポートに加え、ワークスペースはSnowflake内の複数のファイルタイプとプロジェクトにまたがるコードを作成、整理、管理できる統一エディターを提供します。詳細については、 ワークスペース をご参照ください。

dbtプロジェクトオブジェクトについて

DBTPROJECT は、Snowflake内にあるdbtプロジェクトのバージョン管理されたソースファイルを含んでいる、スキーマレベルのオブジェクトです。dbtプロジェクトオブジェクトをワークスペースに接続することも、ワークスペースから独立してオブジェクトを作成および管理することもできます。

Snowflakeの他のスキーマレベルのオブジェクトと同様に、dbtプロジェクトオブジェクトをCREATE, ALTERおよび DROP できます。また、dbtプロジェクトオブジェクトはロールベースのアクセス制御(RBAC)もサポートします。Snowflakeウェアハウスから.:doc:/sql-reference/sql/execute-dbt-project コマンドを使用して、test``run``などのdbtコマンドを実行することができます。タスク を使用すれば、これらのコマンドの実行をスケジュールすることもできます。

dbtプロジェクトオブジェクトは通常、dbt-project.yml ファイルを含むdbtプロジェクトディレクトリに基づいています。これは、ワークスペース内からdbtプロジェクトオブジェクトをデプロイ(作成)するときにSnowflakeが使用するパターンです。

サブディレクトリに複数のdbtプロジェクトを含む親ディレクトリからdbtプロジェクトを選んで作成することもできます。この方法でdbtプロジェクトオブジェクトを作成する場合は、プロジェクトで使用する任意の EXECUTE DBT PROJECT コマンドのPROJECT_ROOT パラメーターを使用する必要があります。このパラメーターは、プロジェクトの dbt_project.yml ファイルを含むサブディレクトリへのパスを指定します。

dbtプロジェクトオブジェクトの CI/CD ワークフロー

dbtプロジェクトオブジェクトはSnowflakeのCLI コマンドをサポートします。これを使用すると、コマンドラインからdbtプロジェクトを作成および管理することができます。これは、dbtプロジェクトをデータエンジニアリングワークフローや CI/CD パイプラインに統合する際に便利です。詳細については、 Snowflake CLICI/CD と Snowflake CLI の統合 および snow dbtコマンド をご参照ください。

dbtプロジェクトオブジェクトとファイルのバージョン管理

Snowflakeは、dbtプロジェクトオブジェクトとそれに対応するプロジェクトファイルのバージョンを管理します。このバージョン管理を使用して、データ開発および展開ライフサイクル全体の変更を追跡および管理できます。Snowflakeは、次の例に示すように、dbtプロジェクトステージ内のdbtプロジェクトオブジェクトのバージョンを識別します。

snow://dbt/my_db.my_schema.my_dbt_project_object/versions/version_id

version_id は以下の識別子のいずれかになります。

  • VERSION$<数値> - は、VERSION$<数値>``の形式でバージョン識別子を指定します。条件: ``<num> is a positive integer, for example, VERSION$1

    dbtプロジェクトオブジェクトを作成し、dbtプロジェクトオブジェクトの新しいバージョンごとに1つずつインクリメントする場合、バージョン番号は 1 で始まります。

    Snowflakeは、次のタスクを実行するとバージョン識別子をインクリメントします。

    • ワークスペースから:ui:`Redeploy dbt project`(ALTER コマンドを実行)。

    • ALTER DBT PROJECT コマンドを使用してプロジェクトを更新します。

    • Snow の CLI snow dbt deploy コマンド を``--force`` オプションなしで実行します。

    Snowflakeはバージョン識別子を 1 にリセットし、以下のコマンドを実行するとすべてのバージョンエイリアスを削除します。

    • OR REPLACE オプションのある SQL のCREATEDBTPROJECT コマンド。

    • Snowflake CLIで --force オプションのある snow dbt deploy コマンド。

  • LAST - dbtプロジェクトオブジェクトの最新バージョンを示します。

  • FIRST - dbtプロジェクトオブジェクトの最も古いバージョンを示します。

  • version_name_alias - ADDVERSION オプションのある ALTER DBT PROJECT コマンドを使用して、dbtプロジェクトオブジェクトの特定のバージョンに対して作成したカスタムバージョン名のエイリアスを示します。バージョン名のエイリアスは常に、VERSION$3 のように特定のバージョン識別子にマッピングされます。

dbtプロジェクトステージに格納されているプロジェクトファイルはバージョンごとに整理され、各バージョンには独自のサブディレクトリがあります。たとえば、VERSION$3 のバージョン識別子を持つ my_dbt_project_object という名前のdbtプロジェクトオブジェクトや dbt_project.yml という名前のdbtプロジェクトファイルは、次の例で示すように参照できます。

snow://dbt/my_db.my_schema/my_dbt_project_object/versions/VERSION$3/dbt_project.yml

要件、考慮事項、および制限

dbt Projects on Snowflake を使用する前に、このセクションの要件、考慮事項、および制限を精査します。

dbtプロジェクト

次の要件、考慮事項、および制限は、dbt Projects on Snowflake でサポートされているdbtプロジェクト構成に適用されます。

  • dbt Coreプロジェクトのみがサポートされています。dbt Cloudプロジェクトはサポートされていません。dbt Projects on Snowflake はdbt-coreバージョン1.9.4とdbt-snowflakeバージョン1.9.2を実行します。既存のdbtプロジェクトをSnowflakeに移行する場合は、dbtバージョンをSnowflakeバージョンと合わせる必要はありません。

  • Snowflakeワークスペースの各dbtプロジェクトフォルダーには、Snowflakeの プロジェクトのためのターゲットとなる warehousedatabaseschema および role を指定する profiles.yml ファイルが含まれている必要があります。その typesnowflake. に設定する必要があります。dbtには account および user が必要ですが、dbtプロジェクトは現在のアカウントとユーザーコンテキストをもとにSnowflakeで実行されるため、これらは空または任意の文字列のままにすることができます。

  • ワークスペース内のdbtプロジェクトでは、フォルダー構造に20,000個を超えるファイルを含めることはできません。この制限には、target/dbt_packages/logs ディレクトリを含むdbtプロジェクトディレクトリとサブディレクトリ内のすべてのファイルが含まれます。ワークスペース内からdbtプロジェクトが実行されると、そこにログファイルが保存されます。

ストアドプロシージャ

ストアドプロシージャを使用して EXECUTEDBTPROJECT を呼び出す場合、呼び出し元権限ストアドプロシージャを使用します。詳細については、 CREATE PROCEDURE および ストアドプロシージャの作成 をご参照ください。

dbt Projects on Snowflake のワークスペース

dbt Projects on Snowflake のワークスペースには、次の要件、考慮事項、および制限が適用されます。

個人データベース要件

ワークスペースは個人データベース内で作成され、他のユーザーと共有することはできません。個人データベースはアカウントレベルで有効にする必要があります。これには ACCOUNTADMIN 権限が必要です。詳細については、 ワークスペースの管理 をご参照ください。

セカンダリロールは、プロジェクトごと、セッションごとに必要です。

dbt Projects on Snowflake のワークスペース内からdbtコマンドを実行するには、セカンダリロールを有効にする必要があります。プロジェクトとセッションでセカンダリロールが有効になっていない場合、コマンドを最初に実行する際に Profile リストからセカンダリロールを有効にするよう求められます。この選択はプロジェクトごとに行う必要があり、選択は現在のブラウザセッションを超えて保持されません。

Enterprise Editionアカウントをお持ちの場合、セッションポリシーがそのアカウントまたは特定のユーザーのセカンダリロールを許可しないように構成されている場合があります。これらのユーザーは、dbt Projects on Snowflake のワークスペース内からdbtコマンドを実行できません。セッションポリシーの詳細については、セッションポリシーでセカンダリロールを指定する をご参照ください。

Gitリポジトリ

dbt Projects on Snowflake のワークスペースをGitリポジトリに接続する場合は、以下の要件、考慮事項、および制限が適用されます。

  • Snowflakeで API 統合を設定するには、SnowflakeのGitリポジトリオブジェクトを設定する必要があります。詳細については、 Gitを使用するためのSnowflakeの設定 をご参照ください。

  • PrivateLink からのみアクセスできるGitリポジトリはサポートされていません。

  • 2GB より大きいGitリポジトリはサポートされていません。

  • 空のGitリポジトリには接続できません。少なくとも1つのコミットが必要です。

dbt依存関係

次の要件、考慮事項、および制限は、dbt Projects on Snowflake のdbtプロジェクトのdbt依存関係に適用されます。

  • dbt Projects on Snowflake のワークスペース内から、またはSnowflake CLI からの snow dbt execute コマンドを使用して dbt:code:deps コマンドを実行し、dbt_packages プロジェクトフォルダーの構築および入力を行う必要があります。EXECUTEDBTPROJECTSQL コマンドを使用した deps コマンドは実行できません。または、dbtプロジェクトオブジェクトとしてSnowflakeにデプロイする前に、ローカルdbtプロジェクトで deps を実行することができます。

  • packages.yml ファイル内での Gitパッケージ の指定はサポートされていません。

  • Snowflakeが依存関係のリポジトリにアクセスできるようにするには、ネットワークルールと外部アクセス統合が必要です。詳細については、 dbt依存関係のためにSnowflakeで外部アクセス統合を作成する をご参照ください。外部ネットワークアクセスの制限の詳細については、外部ネットワークアクセスの制限 をご参照ください。

テレメトリー、ログ、トレース

次の要件、考慮事項、および制限は、Snowflake上のdbtのテレメトリ、ログ、およびトレースに適用されます。

  • dbt Projects on Snowflake のワークスペースは標準出力(stdout)が動的にストリームされず、標準出力はコマンド完了時にのみ表示可能です。

  • ログとトレースを表示するには、dbtプロジェクトオブジェクトの LOG_LEVEL および TRACE_LEVEL を設定する必要があります。詳細については、 Snowflakeでのdbtプロジェクトのアクセス制御 および Snowflakeでdbtプロジェクトを監視する をご参照ください。

  • デフォルトでは、Snowflakeはデフォルトの SNOWFLAKE.TELEMETRY.EVENTS テーブルでテレメトリーを収集します。アカウントのイベントテーブルとしてカスタムイベントテーブルが設定されている場合、テレメトリーデータはそこに収集されます。Enterprise Editionアカウントを使用する場合、イベントテーブルを作成してテレメトリーデータを収集し、dbtプロジェクトオブジェクトがデプロイされたデータベースに関連付けることができます。詳細については、 イベントテーブルの概要 をご参照ください。

サポートされているdbtコマンド

次のテーブルでは、dbt Projects on Snowflake でサポートされているdbtコマンドを示しています。ここにリストされていない dbtコマンド はサポートされていません。

dbt Projects on Snowflake、実行メソッドでサポートされているdbtコマンド

dbtコマンド

ワークスペース

EXECUTE DBT PROJECT

snow dbt execute (CLI)

ビルド

コンパイル

依存関係

リスト

解析

実行

操作を実行

シード

表示

スナップショット

テスト