Snowflake CLI を使用した |sf-dbt|の管理

注釈

Snowflake CLI の dbt Projects on Snowflake 機能はバージョン3.13.0以降でのみ使用可能です。

Snowflake CLI を使用して、次の操作でdbtプロジェクトを管理できます。

Deploying a dbt project object

The snow dbt deploy command uploads local files to a temporary stage and creates a new dbt project object, updates it by making a new version, or completely recreates it. A valid dbt project must contain two files:

  • dbt_project.yml: A standard dbt configuration file that specifies the profile to use.

  • profiles.yml: A dbt connection profile definition referenced in dbt_project.yml. profiles.yaml must define the database, role, schema, and type.

    • デフォルトでは、 dbt Projects on Snowflake は、dbt環境またはプロファイルから指定されたターゲットスキーマ(target.schema)を使用します。dbt Coreの動作とは異なり、 profiles.yml ファイルで指定されたターゲットスキーマは、正常にコンパイルまたは実行するためには、dbtプロジェクトを作成する前に存在している必要があります。

    <profile_name>:
    target: dev
    outputs:
      dev:
        database: <database_name>
        role: <role_name>
        schema: <schema_name>
        type: snowflake
    
    Copy

次の例は、 snow dbt deploy コマンドの使用方法を説明しています。

  • :codenowrap:`jaffle_shop`という名前のdbtプロジェクトオブジェクトをデプロイします。

    snow dbt deploy jaffle_shop
    
    Copy
  • Deploy a project named jaffle_shop from a specified directory and create or add a new version depending on whether the dbt project object already exists:

    snow dbt deploy jaffle_shop --source /path/to/dbt/directory --profiles-dir ~/.dbt/ --force
    
    Copy
  • カスタムプロファイルディレクトリを使用し、 外部アクセス統合 を有効にして、指定されたディレクトリから jaffle_shop という名前のプロジェクトをデプロイします。

    snow dbt deploy jaffle_shop --source /path/to/dbt/directory
    --profiles-dir ~/.dbt/ --default-target dev
    --external-access-integration dbthub-integration
    --external-access-integration github-integration
    --force
    
    Copy

Listing all available dbt project objects

The snow dbt list command lists all available dbt project objects on Snowflake.

次の例は、 snow dbt list コマンドの使用方法を説明しています。

  • 使用可能なすべてのdbtプロジェクトオブジェクトを一覧表示します。

    snow dbt list
    
    Copy
  • :codenowrap:`product`データベース内の :codenowrap:`JAFFLE`で始まる名前を持つdbtプロジェクトオブジェクトを一覧表示します。

    snow dbt list --like JAFFLE% --in database product
    
    Copy

Executing a dbt project object command

The snow dbt execute command executes one of the following dbt commands on a Snowflake dbt project object:

dbtコマンドの使用の詳細については、dbtコマンドリファレンス をご参照ください。

次の例は、 snow dbt execute コマンドの使用方法を説明しています。

  • dbt test コマンドを実行します。

    snow dbt execute jaffle_shop test
    
    Copy
  • run dbtコマンドを非同期で実行します。

    snow dbt execute --run-async jaffle_shop run --select @source:snowplow,tag:nightly models/export
    
    Copy

Describing a dbt project object

The snow dbt describe command describes a dbt project object on Snowflake.

次の例では、Snowflakeの my_dbt_project という名前のdbtプロジェクトオブジェクトについて説明します。

snow dbt describe my_dbt_project
Copy

Dropping a dbt project object

The snow dbt drop command deletes a dbt project object on Snowflake.

次の例では、Snowflakeの my_dbt_project という名前のdbtプロジェクトオブジェクトを削除します。

snow dbt drop my_dbt_project
Copy

Use snow dbt commands in a CI/CD workflow

注釈

CI/CD ワークフローの構築中に必要なのは、Githubなどのgitサーバーや |sf-cli|だけです。Gitリポジトリオブジェクトは必要ありません。

CI/CD パイプラインを構築するためには、Snowflake CLI でdbtコマンドを実行できます。これらのパイプラインは通常、新しいプルリクエストなどの新しいコードをテストしたり、何かがメインブランチにマージされるたびに実稼働アプリケーションを更新したりするために使用されます。

snow dbt コマンドを使用して CI/CD ワークフローを構築するには、次のステップに従います。

  1. dbtプロジェクトを準備します。

    1. dbtプロジェクトをダウンロードするか、新しいプロジェクトを開始してください。

      • メインプロジェクトディレクトリに dbt_project.yml ファイルおよび profiles.yml ファイルが含まれていることを確認します。

      • dbt_project.yml で参照されているプロファイル名が profiles.yml で定義されていることを確認します。

        注釈

        Snowflakeのdbtプロジェクトオブジェクトはパスワードを必要としないため、profiles.yml にパスワードが含まれている場合は、それが削除されるまでデプロイが停止します。

  2. Snowflake CLI GitHub アクションを設定します。

    Snowflake CLI の GitHub アクションの設定 および Snowflakeとの接続の確認 に関するガイドラインに従います。

  3. ワークフローを定義します。

    組織のニーズに基づいて、ワークフローが実行する必要のあるコマンドを決定します。次の例は、新しいファイルを使用して product_pipeline という名前のdbtプロジェクトオブジェクトのバージョンを更新し、変換を実行し、最後にテストを実行する CI ワークフローについて説明しています。

    - name: Execute Snowflake CLI command
      run: |
        snow dbt deploy product_pipeline
        snow dbt execute product_pipeline run
        snow dbt execute product_pipeline test
    
    Copy