验证应用程序包¶
先决条件¶
您的
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
命令无需运行或部署应用程序即可验证安装脚本。该命令会将源文件上传到单独的初始暂存区,该初始暂存区将在命令完成后自动删除,以避免干扰应用程序源暂存区的文件。
如有必要,创建连接。
从项目内部执行
snow app validate
命令,如下所示:snow app validate --connection="dev"
成功时,该命令返回以下消息:
Snowflake Native App validation succeeded.
如果验证失败,则会显示以下错误消息以及任何错误消息:
Snowflake Native App setup script failed validation.
如果您想将原始验证输出显示为 JSON,您可以执行 snow app validate --format json
,如下所示:
snow app validate --format json
{
"errors": [],
"warnings": [],
"status": "SUCCESS"
}
其中:
错误 显示错误列表(如果存在)。错误会导致验证失败。
警告 显示警告列表(如果存在)。
状态 显示验证结果:SUCCESS 或 FAILURE。
如果验证遇到任何错误(导致验证失败)或警告(令验证成功),则该命令将显示错误或警告的以下信息:
message
:可由人工读取的错误或警告消息。cause
:将 SQL 结构视为错误或警告的原因。errorCode
:与错误或警告相关的数字代码。fileName
:包含错误或警告的文件名,相对于暂存区根目录。line
:文件中标识错误或警告位置的行编号。column
:发生错误或警告的行中的列编号。
以下示例显示了包含警告和错误的失败验证:
snow app validate --format json
{
"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"
}