Snow 应用程序运行¶
在 Snowflake 账户中创建应用程序包,将代码文件上传到相应暂存区,然后通过应用程序包创建或升级应用程序对象。
语法¶
snow app run
--version <version>
--patch <patch>
--from-release-directive
--channel <channel>
--interactive / --no-interactive
--force
--validate / --no-validate
--package-entity-id <package_entity_id>
--app-entity-id <app_entity_id>
--project <project_definition>
--env <env_overrides>
--connection <connection>
--host <host>
--port <port>
--account <account>
--user <user>
--password <password>
--authenticator <authenticator>
--workload-identity-provider <workload_identity_provider>
--private-key-file <private_key_file>
--token <token>
--token-file-path <token_file_path>
--database <database>
--schema <schema>
--role <role>
--warehouse <warehouse>
--temporary-connection
--mfa-passcode <mfa_passcode>
--enable-diag
--diag-log-path <diag_log_path>
--diag-allowlist-path <diag_allowlist_path>
--oauth-client-id <oauth_client_id>
--oauth-client-secret <oauth_client_secret>
--oauth-authorization-url <oauth_authorization_url>
--oauth-token-request-url <oauth_token_request_url>
--oauth-redirect-uri <oauth_redirect_uri>
--oauth-scope <oauth_scope>
--oauth-disable-pkce
--oauth-enable-refresh-tokens
--oauth-enable-single-use-refresh-tokens
--client-store-temporary-credential
--format <format>
--verbose
--debug
--silent
--enhanced-exit-codes
实参¶
无
选项¶
--version TEXT您要用来创建应用程序对象的现有应用程序包定义版本。根据项目定义文件确定应用程序对象和应用程序包名称。
--patch INTEGER在现有应用程序包中定义的给定
--version下的补丁号,应当用于创建应用程序对象。根据项目定义文件确定应用程序对象和应用程序包名称。--from-release-directive创建或升级应用程序对象,使其适用于 Snowflake 账户的版本指令指定的版本和补丁。如果给定应用程序包的 Snowflake 账户不存在版本指令,则该命令将失败,指令会由项目定义文件确定。默认:未设置。默认值:False。
--channel TEXT从发布指令创建或升级应用程序实例时,要使用的发布通道的名称。需要设置
--from-release-directive标志。如果未设置,则将使用默认通道。--interactive / --no-interactive启用此选项后,即使标准输入和输出不是终端设备,也会显示提示。在交互式 shell 环境中默认值为 True,否则为 False。
--force启用此选项后,命令会隐式批准出现的任何提示。如果未指定交互模式,并且想要执行可能具有破坏性的操作,则应启用此选项。默认为未设置。默认值:False。
--validate / --no-validate启用后,此选项将触发已部署的 Snowflake Native App 安装脚本 SQL 的验证。默认值:True。
--package-entity-id TEXT当 definition_version 为 2 或更高时,要操作的包实体的 ID。
--app-entity-id TEXT当 definition_version 为 2 或更高时,要操作的应用程序实体的 ID。
-p, --project TEXTSnowflake 项目的存储路径。默认为当前工作目录。
--env TEXT格式为 key=value 的字符串。替换用于模板的 env 部分的变量。默认值:[]。
--connection, -c, --environment TEXT连接名称,如您在
config.toml文件中所定义。默认值:default。--host TEXT连接的主机地址。替换为连接指定的值。
--port INTEGER连接的端口。替换为连接指定的值。
--account, --accountname TEXT分配给 Snowflake 账户的名称。替换为连接指定的值。
--user, --username TEXT连接到 Snowflake 的用户名。替换为连接指定的值。
--password TEXTSnowflake 密码。替换为连接指定的值。
--authenticator TEXTSnowflake 身份验证器。替换为连接指定的值。
--workload-identity-provider TEXTWorkload identity provider (AWS, AZURE, GCP, OIDC). Overrides the value specified for the connection.
--private-key-file, --private-key-path TEXTSnowflake 私钥文件路径。替换为连接指定的值。
--token TEXT连接到 Snowflake 时使用的 OAuth 令牌。
--token-file-path TEXT连接到 Snowflake 时使用的带有 OAuth 令牌的文件路径。
--database, --dbname TEXT要使用的数据库。替换为连接指定的值。
--schema, --schemaname TEXT要使用的数据库架构。替换为连接指定的值。
--role, --rolename TEXT要使用的角色。替换为连接指定的值。
--warehouse TEXT要使用的仓库。替换为连接指定的值。
--temporary-connection, -x使用命令行参数定义的连接,而不是在配置中定义的连接。默认值:False。
--mfa-passcode TEXT用于多重身份验证的令牌 (MFA)。
--enable-diag是否生成连接诊断报告。默认值:False。
--diag-log-path TEXT生成的报告的路径。默认为系统临时目录。默认:<system_temporary_directory>。
--diag-allowlist-path TEXT包含允许列表参数的 JSON 文件的路径。
--oauth-client-id TEXT身份提供商为 Snowflake 集成提供的客户端 ID 的值。
--oauth-client-secret TEXT身份提供商为 Snowflake 集成提供的客户端密钥的值。
--oauth-authorization-url TEXT向驱动程序提供授权码的身份提供商端点。
--oauth-token-request-url TEXT向驱动程序提供访问令牌的身份提供商端点。
--oauth-redirect-uri TEXTURI 用于授权码重定向。
--oauth-scope TEXT身份提供商授权请求中请求的范围。
--oauth-disable-pkce禁用代码交换证明密钥 (PKCE)。默认值:
False。--oauth-enable-refresh-tokens在实际访问令牌过期时启用静默重新身份验证。默认值:
False。--oauth-enable-single-use-refresh-tokens是否选择启用一次性刷新令牌语义。默认值:
False。--client-store-temporary-credential存储临时凭据。
--format [TABLE|JSON|JSON_EXT|CSV]指定输出格式。默认:TABLE。
--verbose, -v显示日志级别
info及更高级别的日志条目。默认值:False。--debug显示日志级别
debug及更高级别的日志条目;调试日志包含其他信息。默认值:False。--silent关闭到控制台的中间输出。默认值:False。
--enhanced-exit-codes根据错误类型区分退出错误代码。默认值:False。
--help显示此命令的帮助文本。
使用说明¶
备注
此命令不接受由角色或仓库替换您的 config.toml 文件。相反,请将它们添加到 snowflake.yml 或 snowflake.local.yml 中的 Native App 定义中。
此命令依赖解析的项目定义来确定要上传文件的暂存区、要上传的文件以及要创建的对象的名称。有关默认值的指导,请参阅 关于 Snowflake Native App 项目 和 snow init 使用说明。您也可以根据自己的喜好更改它们,不过您要负责检查其是否与账户中的现有对象有任何冲突。
Snowflake CLI 创建的对象使用特殊注释
GENERATED_BY_SNOWCLI进行标记。用于创建应用程序包和实例的角色必须具有适当的账户级别权限才能使用 Snowflake Native App。有关详细信息,请参阅 创建应用程序包 和 在本地安装和测试应用程序。
默认情况下,snow app run 命令会在 Snowflake 账户中创建应用程序包,将代码文件上传到其暂存区,验证安装脚本 SQL,然后创建(或升级)该应用程序的开发模式实例。运行默认命令时,应牢记以下几点:
项目定义文件中在
nativeapp.project.artifacts下指定的所有文件都会上传到 Snowflake 暂存区。此工件必须包括manifest.yml文件及其相关的设置脚本。如果需要,在调用
snow app run之前,在nativeapp.project.artifacts下指定的所有文件都需要单独编译和打包。Snowflake CLI 没有提供任何为您执行这些中间任务的功能,因此您可以通过在自己的脚本中执行它来完全控制构建流程。Snowflake CLI 在创建这些对象时使用默认应用程序包名称、暂存区名称和应用程序名称。
snow app run在初始运行后的后续运行会将上传文件的状态与本地目录中的文件进行比较,并有选择地只上传修改过的文件以节省时间。如果任何文件已更改,应用程序将根据暂存区的新内容进行升级。如果应用程序包已经存在,且其分发属性为
INTERNAL,则命令会检查该包是否由 Snowflake CLI 创建。如果不是,命令会引发错误。如果应用程序包的分发是EXTERNAL,则不执行此类检查。如果您正在使用的应用程序包的分发值与解析的项目定义中设置的值不同,则该命令会警告您,但会继续执行。
如果您指定了 --version、--patch 或 --from-release-directive 选项,此命令将升级现有的应用程序实例,或者如果应用程序不存在,则创建一个实例。在这种情景下,它不会创建应用程序包。
如果 Snowflake CLI 由于任何原因无法更新您的应用程序,例如尝试将最初以松散文件模式安装的应用程序升级到使用发布指令,则会尝试删除现有应用程序并使用所需的安装策略创建新的应用程序。该命令会提示您在执行操作之前确认删除。
如果您不想与命令交互,而是要强制执行所有操作,请使用
--force选项绕过所有提示,该选项对所有询问是否继续执行破坏性操作的输入都会选择同意。Snowflake CLI 会尝试确定您是否正在交互式 shell 中运行命令。如果没有提供
--force,而您正在执行交互外壳中的命令,它会自动为您选择交互选项。如果要强制 Snowflake CLI 与你交互,即使不是在交互外壳中,也请使用
--interactive选项。
示例¶
这些示例假定您已对代码文件进行了必要的变更,并已将其添加到 snowflake.yml 或 snowflake.local.yml 文件中。
如果要使用暂存文件创建应用程序包和应用程序,可以执行以下操作:
cd my_app_project my_app_project_build_script.sh snow app run --connection="dev"
如果您已经拥有带有版本和修补程序的应用程序包,希望使用此版本和补丁创建应用程序,并调用交互模式,则可以执行以下操作:
snow app run --version V1 --patch 12 --interactive --connection="dev"
在此处,版本
V1和补丁12仅用作示例。如果您在应用程序包设置了现有的版本指令,希望使用其创建应用程序并绕过交互模式,则可以执行以下操作:
snow app run --from-release-directive --force --connection="dev"
要从非默认发布通道的发布指令创建应用程序,请执行:
snow app run --from-release-directive --channel ALPHA --connection="dev"
此示例展示了如何使用
--env选项传递多个环境变量:snow app run --env source_folder="src/app" --env stage_name=mystage