アプリケーションパッケージの検証

前提条件

  • config.toml ファイルに既存の接続が必要です。

  • Snowflake Native App プロジェクトに snowflake.yml ファイルが必要です。

Snowflake CLI は、アプリケーションを実行(snow app run)またはデプロイ(snow app deploy)すると、 SQL EXECUTE IMMEDIATE ステートメントを使用してインクルードされた他の SQL ファイルとともに、 Snowflake Native App セットアップスクリプトを自動的に検証します。このスクリプトは、いずれかのコマンドによって最近アップロードされたスクリプトを使用します。SQL 構文エラー、無効なオブジェクト参照、ベストプラクティスをチェックします。スクリプトの検証が失敗した場合、実行されたコマンドは中止されるが、ステージングされたファイルは自動的にロールバックされません。

Snowflake Native App セットアップスクリプトの詳細については、Snowflake Native App Framework ドキュメントの セットアップスクリプトを作成する をご参照ください。

セットアップスクリプトを手動で検証する方法

アプリケーションをデプロイする前にセットアップ スクリプトを検証して、デプロイ プロセス中に検証に失敗した場合に発生する可能性のある影響を回避したい場合があります。 snow app validate コマンドは、アプリケーションを実行またはデプロイすることなく、セットアップスクリプトを検証します。これは、アプリケーションのソース・ステージにあるファイルを邪魔しないように、コマンド完了後に自動的にドロップされる別のスクラッチ・ステージにソース・ファイルをアップロードします。

  1. 必要に応じて、 接続を作成します

  2. 次のように、プロジェクト内から snow app validate コマンドを実行します。

    snow app validate --connection="dev"
    
    Copy

    成功すると、コマンドは次のメッセージを返します。

    Snowflake Native App validation succeeded.
    

    検証に失敗すると、エラーメッセージとともに以下のエラーメッセージが表示されます。

    Snowflake Native App setup script failed validation.
    

JSON のような生の検証出力を見たい場合は、図のように:codenowrap:snow app validate --format json を実行します。

snow app validate --format json
Copy
{
    "errors": [],
    "warnings": [],
    "status": "SUCCESS"
}

条件:

  • errors は、もしエラーがあれば、そのリストを表示します。エラーは検証を失敗させます。

  • warnings は、警告があれば、そのリストを表示します。

  • status は検証の結果を示します: SUCCESS または FAILURE です。

検証が失敗する原因となるエラーや、検証が成功する原因となる警告が発生した場合、コマンドはそのエラーや警告に関する以下の情報を表示します。

  • メッセージ: エラーまたは警告に対する人間が読めるメッセージ。

  • 原因: SQL 構築がエラーまたは警告とみなされる理由。

  • errorCode: エラーまたは警告に関連する数値コード。

  • fileName: エラーまたは警告を含むファイル名。ステージルートからの相対パス。

  • : エラーまたは警告の場所を特定するファイルの行番号。

  • column: エラーまたは警告が発生した行の列番号。

次の例は、警告とエラーの両方を含む検証の失敗を示しています。

snow app validate --format json
Copy
{
    "errors": [
        {
            "message": "Error in file '@STAGE_SNOWFLAKE_CLI_SCRATCH/empty.sql': Empty SQL statement.",
            "cause": "Empty SQL statement.",
            "errorCode": "000900",
            "fileName": "@STAGE_SNOWFLAKE_CLI_SCRATCH/empty.sql",
            "line": -1,
            "column": -1
        },
        {
            "message": "Error in file '@STAGE_SNOWFLAKE_CLI_SCRATCH/second.sql': Unsupported feature 'CREATE VERSIONED SCHEMA without OR ALTER'.",
            "cause": "Unsupported feature 'CREATE VERSIONED SCHEMA without OR ALTER'.",
            "errorCode": "000002",
            "fileName": "@STAGE_SNOWFLAKE_CLI_SCRATCH/second.sql",
            "line": -1,
            "column": -1
        },
        {
            "message": "Error in file '@STAGE_SNOWFLAKE_CLI_SCRATCH/setup_script.sql': File '/does-not-exist.sql' cannot be found in the same stage as the setup script is located.",
            "cause": "File '/does-not-exist.sql' cannot be found in the same stage as the setup script is located.",
            "errorCode": "093159",
            "fileName": "@STAGE_SNOWFLAKE_CLI_SCRATCH/setup_script.sql",
            "line": -1,
            "column": -1
        }
    ],
    "warnings": [
        {
            "message": "Warning in file '@STAGE_SNOWFLAKE_CLI_SCRATCH/setup_script.sql' on line 11 at position 35: APPLICATION ROLE should be created with IF NOT EXISTS.",
            "cause": "APPLICATION ROLE should be created with IF NOT EXISTS.",
            "errorCode": "093352",
            "fileName": "@STAGE_SNOWFLAKE_CLI_SCRATCH/setup_script.sql",
            "line": 11,
            "column": 35
        },
        {
            "message": "Warning in file '@STAGE_SNOWFLAKE_CLI_SCRATCH/setup_script.sql' on line 15 at position 13: CREATE Table statement in the setup script should have \"IF NOT EXISTS\", \"OR REPLACE\", or \"OR ALTER\".",
            "cause": "CREATE Table statement in the setup script should have \"IF NOT EXISTS\", \"OR REPLACE\", or \"OR ALTER\".",
            "errorCode": "093351",
            "fileName": "@STAGE_SNOWFLAKE_CLI_SCRATCH/setup_script.sql",
            "line": 15,
            "column": 13
        },
        {
            "message": "Warning in file '@STAGE_SNOWFLAKE_CLI_SCRATCH/setup_script.sql' on line 15 at position 13: Table identifier 'MY_TABLE' should include its parent schema name.",
            "cause": "Table identifier 'MY_TABLE' should include its parent schema name.",
            "errorCode": "093353",
            "fileName": "@STAGE_SNOWFLAKE_CLI_SCRATCH/setup_script.sql",
            "line": 15,
            "column": 13
        }
    ],
    "status": "FAIL"
}