プロジェクト定義ファイル

snowflake.yml というプロジェクト定義ファイルは、 Snowflake Native App プロジェクトとしてディレクトリを宣言します。これは、 Snowflake Native App プロジェクトディレクトリのルートに存在するバージョン管理されたファイルであり、手動で作成することも、プロジェクト初期化の一部として Snowflake CLI によって作成することもできます。この構造化ファイルをディレクトリ内に提供し、独自の独立したプロジェクト構造を使用することを選択できる限り、 Snowflake CLI は関連ファイルを検出し、通常どおり機能を実行できます。

Native Appsの場合、 snowflake.yml は次のようになります。

definition_version: 2
entities:
  pkg:
    type: application package
    identifier: <name_of_app_pkg>
    stage: app_src.stage
    manifest: app/manifest.yml
    artifacts:
      - src: app/*
        dest: ./
      - src: src/module-add/target/add-1.0-SNAPSHOT.jar
        dest: module-add/add-1.0-SNAPSHOT.jar
      - src: src/module-ui/src/*
        dest: streamlit/
    meta:
      role: <your_app_pkg_owner_role>
      warehouse: <your_app_pkg_warehouse>
      post_deploy:
        - sql_script: scripts/any-provider-setup.sql
        - sql_script: scripts/shared-content.sql
  app:
    type: application
    identifier: <name_of_app>
    from:
      target: pkg
    debug: <true|false>
    meta:
      role: <your_app_owner_role>
      warehouse: <your_app_warehouse>
Copy

共通エンティティ・プロパティ

次の表では、Native Appsのプロジェクト定義エンティティで使用できる一般的なプロパティについて説明します。プロジェクト定義エンティティの詳細については、 Specify entities をご参照ください。

共通エンティティ・プロパティ

プロパティ

定義

タイプ

required, string

管理するエンティティの型。 Snowflake Native App に有効な値には、次が含まれます。

識別子

optional, string

オプションのエンティティのSnowflake識別子。引用符で囲まれていない識別子と引用符で囲まれた識別子の両方がサポートされています。引用符で囲まれた識別子を使用するには、 YAML の値に引用符を含めます(例: ’”My Native Application Package”’)。

指定がない場合は、プロジェクト定義のエンティティ ID が識別子として使用されます。

meta.warehouse

optional, string

これらのスクリプト内の SQL コマンドでウェアハウスの使用が必要な場合、 meta.post_deploy の一部として提供されたスクリプトを実行するために使用されるウェアハウス。

デフォルト: Snowflake CLI config.toml ファイルで接続に指定されたウェアハウス。

注釈

ウェアハウスを指定しないと、アプリケーションは検証に合格しますが、インストールは失敗します。

通常、この値は プロジェクト定義の上書き で説明されているように snowflake.local.yml で指定します。

meta.role

optional, string

アプリケーションパッケージとプロバイダー側オブジェクトを作成するときに使用するロール。

注釈

ロールを指定しない場合、 Snowflake CLI はSnowflakeアカウントでユーザーに割り当てられた既定のロールを使用しようとします。

通常、この値は プロジェクト定義の上書き で説明されているように snowflake.local.yml で指定します。

デフォルト: Snowflake CLI 接続 で指定されたロール

meta.post_deploy

optional, sequence

エンティティの作成後に実行する SQL スクリプトのリスト。以下の例では、プロジェクト定義ファイルにこれらのスクリプトを定義する方法を示しています。

definition_version: 2
entities:
  myapp_pkg:
    type: application package
    ...
    meta:
      post_deploy:
        - sql_script: scripts/post_deploy1.sql
        - sql_script: scripts/post_deploy2.sql
Copy

これらのスクリプトは、エンティティを作成または更新するコマンドによって呼び出されます。例えば、snow app deploy コマンドを実行すると、パッケージの作成または更新後にこれらのスクリプトが実行されます。また、アプリケーションのインスタンスがバージョンやリリースディレクティブから直接インストールされていない場合は、snow app run によっても実行されます。

また、以下のサンプル スクリプト コンテンツに示すように、デプロイ後の SQL スクリプトでもテンプレートを使用できます。

GRANT reference_usage on database provider_data to share in entity <% fn.str_to_id(ctx.entities.myapp_pkg.identifier) %>
Copy

meta.use_mixins

optional, sequence

このエンティティに適用する mixin の名前。詳細については、 プロジェクト・ミキシン をご参照ください。

アプリケーション・パッケージのエンティティ・プロパティ

次の表に、Native Appsのアプリケーションパッケージエンティティで使用できる一般的なプロパティを示します。プロジェクト定義エンティティの詳細については、 Specify entities をご参照ください。

アプリケーションパッケージ エンティティのプロパティ

プロパティ

定義

タイプ

required, string

application package である必要があります。

マニフェスト

required, string

プロジェクト内の Snowflake Native App manifest.yml ファイルの場所。

deploy_root

optional, string

構築ステップでアーティファクトがコピーされるプロジェクトのルートにあるフォルダー。この場所にコピーしたら、Snowflakeステージにデプロイできます。

デフォルト: output/deploy

generated_root

optional, string

Snowflake CLI が生成されたファイルを書き込むデプロイルートのサブディレクトリ。

デフォルト: __generated

ステージ

optional, string

アプリケーション成果物を保存するステージの識別子。値は:codenowrap:<スキーマ_名>。<stage_name>。ステージはアプリケーションパッケージオブジェクト内に存在します。名前の衝突を避けるために、名前を変更できます。

デフォルト: app_src.stage

アーティファクト

required, sequence

デプロイルートに追加するファイルソースと宛先のペアのリスト、およびオプションのSnowparkのアノテーションプロセッサー。次のアーティファクト プロパティを使用できます。

  • src: コードソースファイルまたはファイルへのパス

  • dest: アーティファクトをデプロイするディレクトリへのパス。

    ディレクトリを参照する宛先パスは、 / で終わる必要があります。globパターンの宛先が / で終わらない場合はエラーになります。省略された場合、 dest のデフォルトは src と同じ文字列になります。

    各項目に対して、 dict の代わりに文字列を渡すこともできます。この場合、値は srcdest の両方として扱われます。

  • processors: src コードファイルの処理に使用するプロセッサーの名前。詳細については、 アーティファクト・プロセッサーに関する詳細 をご参照ください。

src が(globではなく)1つのファイルだけを参照している場合、 dest はターゲット <パス> または <パス/名前> を参照できます。

各項目に対して、 dict の代わりに文字列を渡すこともできます。この場合、値は srcdest の両方として扱われます。

プロセッサーなしの例:

pkg:
  artifacts:
    - src: app/*
      dest: ./
    - src: streamlit/*
      dest: streamlit/
    - src: src/resources/images/snowflake.png
      dest: streamlit/
Copy

プロセッサーの例:

pkg:
  artifacts:
    - src: qpp/*
      dest: ./
      processors:
          - name: snowpark
            properties:
              env:
                type: conda
                name: <conda_name>
Copy

配布

optional, string

Snowflake CLI で作成されたアプリケーションパッケージの配布。 snow app コマンドを実行すると、作業中のアプリケーションパッケージの配布値が、解決されたプロジェクト定義で設定されている値と異なる場合、 Snowflake CLI は警告を表示します。

デフォルト: Internal

scratch_stage

optional, string

Snowflake CLI が使用する仮スクラッチデータを保存するステージの識別子。値は <schema_name>.<stage_name> の形式を使用します。ステージはアプリケーションパッケージオブジェクト内に存在します。名前の衝突を避けるために、名前を変更できます。

デフォルト: app_src.stage_snowflake_cli_scratch

アプリケーション・エンティティ・プロパティ

次の表に、Native Appsのアプリケーションエンティティで使用できる一般的なプロパティを示します。プロジェクト定義エンティティの詳細については、 Specify entities をご参照ください。

アプリケーション エンティティ用のプロパティ

プロパティ

定義

タイプ

required, string

application である必要があります。

from.target

required, string

このアプリケーション・エンティティの作成元となるアプリケーション・パッケージ。次の例では、target は、snowflake.yml ファイル内のエンティティの名前を定義しています。

from:
  target: my_pkg
Copy

デバッグ

optional, boolean

名前付きステージを使用してアプリケーションを作成するときに、デバッグモードを有効にするかどうか。

デフォルト: True

アーティファクト・プロセッサーに関する詳細

プロジェクト定義ファイルに:codenowrap:artifacts.processors フィールドを含めると、snow app bundle コマンドは、src ディレクトリまたはファイルにある Python コードファイルのカスタム処理を呼び出します。

このセクションでは、サポートされているプロセッサーの一覧を説明します。

Snowpark・プロセッサー

Snowflake CLI でサポートされているプロセッサーのひとつに:codenowrap:snowpark があり、Snowparkのアノテーション処理をPythonファイルに適用します。以下に、処理環境別の基本構造と構文を示します。

  • conda環境でコードを実行するには、以下を使います。

    pkg:
      artifacts:
        - src: <some_src>
          dest: <some_dest>
          processors:
              - name: snowpark
                properties:
                  env:
                    type: conda
                    name: <conda_name>
    
    Copy

    ここで:codenowrap:<conda_name> は、Snowparkアノテーション処理に使用するPythonインタプリターとSnowparkライブラリを含むconda環境の名前です。

  • Pythonの仮想環境でコードを実行するには、以下を使います。

    pkg:
      artifacts:
        - src: <some_src>
          dest: <some_dest>
          processors:
              - name: snowpark
                properties:
                  env:
                    type: venv
                    path: <venv_path>
    
    Copy

    ここで:codenowrap:<venv_path> は、PythonインタプリターとSnowparkアノテーション処理に使用するSnowparkライブラリを含むPython仮想環境のパスです。パスは、プロジェクト・ディレクトリに対する絶対パスでも相対パスでもよいです。

  • 現在アクティブな環境でコードを実行するには、以下の等価な定義のいずれかを使用します。

    pkg:
      artifacts:
        - src: <some_src>
          dest: <some_dest>
          processors:
              - name: snowpark
                properties:
                  env:
                    type: current
    
    Copy

    または

    pkg:
      artifacts:
        - src: <some_src>
          dest: <some_dest>
          processors:
              - name: snowpark
    
    Copy

    または

    pkg:
      artifacts:
        - src: <some_src>
          dest: <some_dest>
          processors:
              - snowpark
    
    Copy

カスタム処理の詳細については、 SQL コード自動生成 および snow app bundle コマンドをご参照ください。

テンプレートプロセッサー

Snowflake Native App プロジェクトは任意のファイルでのテンプレートをサポートしており、アーティファクトの src ディレクトリにあるすべてのファイルでテンプレートを展開できます。この機能を有効にするには、次の例に示すように、templates プロセッサーを、artifacts 定義に含めます。

definition_version: 2
entities:
  pkg:
    type: application package
    identifier: myapp_pkg
    artifacts:
      - src: app/*
        dest: ./
        processors:
          - templates
    manifest: app/manifest.yml
  app:
    type: application
    identifier: myapp_<% fn.get_username() %>
    from:
      target: pkg
Copy

Snowflake CLI がステージにファイルをアップロードする際、アップロード前にテンプレートを自動的に展開します。例えば、あなたのアプリケーションが、<% ctx.entities.pkg.identifier %> テンプレートを含む以下の内容の app/README.md ファイルを含むとします。

This is a README file for application package <% ctx.entities.pkg.identifier %>.
Copy

そして、ファイルをステージにアップロードする前に、テンプレートを以下のように展開します。

This is a README file for application package myapp_pkg.
Copy

プロジェクト定義の上書き

プロジェクトディレクトリには snowflake.yml ファイルが必要ですが、独自のアプリケーションパッケージをテストするための新しいロールなど、 snowflake.yml にローカル上書きを提供することで、 Snowflake CLI の動作をカスタマイズすることもできます。これらの上書きは、ベースプロジェクト定義の横にある snowflake.local.yml ファイルに配置する必要があります。Snowflakeでは、gitでバージョン管理されないように、 .gitignore ファイルに追加することを推奨しています。Snowflakeが提供するすべてのテンプレートでは、すでに .gitignore ファイルに含まれています。

この上書きファイルは、 snowflake.yml ファイルと同じ場所に配置する必要があります。

snowflake.local.yml ファイルは snowflake.yml とまったく同じスキーマを共有しますが、必須であったすべての値が、すでにオプションであった値に加えて、オプションになった点が異なります。 snowflake.local.yml ファイルのサンプルは次のとおりです。

entities:
  pkg:
    meta:
      role: <your_app_pkg_owner_role>
      name: <name_of_app_pkg>
      warehouse: <your_app_pkg_warehouse>
  app:
    debug: <true|false>
    meta:
      role: <your_app_owner_role>
      name: <name_of_app>
      warehouse: <your_app_warehouse>
Copy

すべての snow app コマンドは、ベースとなる snowflake.yml 構成ファイルで設定されたパラメーターよりも、このファイル内のパラメーターを優先します。適切なデフォルトにより、同じSnowflakeアカウントを使用して同じアプリケーションプロジェクトを開発する開発者間の分離が既に提供されるため、始めたばかりの場合は上書きファイルを含めないことをお勧めします。

snowflake.ymlsnowflake.local.yml で上書きした後に取得される最終的な定義スキーマは、解決されたプロジェクト定義と呼ばれます。

制限事項

現在、 Snowflake CLI はサポートされていません

  • 複数の上書きファイル。

  • 空白の上書きファイル。 snowflake.yml の値を上書きする場合にのみ、このファイルを作成してください。