验证应用程序包

先决条件

  • 您的 config.toml 文件中必须存在现有连接。

  • 您的 Snowflake Native App 项目中必须存在 snowflake.yml 文件。

当您运行 (snow app run) 或部署 (snow app deploy) 应用程序时,Snowflake CLI 会自动验证 Snowflake Native App 安装脚本以及使用 SQL EXECUTE IMMEDIATE 语句包含的任何其他 SQL 文件。它使用由其中一个命令最近上传的脚本。验证 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,您可以执行 snow app validate --format json,如下所示:

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

其中:

  • 错误 显示错误列表(如果存在)。错误会导致验证失败。

  • 警告 显示警告列表(如果存在)。

  • 状态 显示验证结果:SUCCESS 或 FAILURE。

如果验证遇到任何错误(导致验证失败)或警告(令验证成功),则该命令将显示错误或警告的以下信息:

  • message:可由人工读取的错误或警告消息。

  • cause:将 SQL 结构视为错误或警告的原因。

  • errorCode:与错误或警告相关的数字代码。

  • fileName:包含错误或警告的文件名,相对于暂存区根目录。

  • line:文件中标识错误或警告位置的行编号。

  • 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"
}
语言: 中文