在 SQL 中使用变量¶
备注
对变量的支持需要项目定义版本 1.1。
您还可以使用项目文件来定义其他命令的变量,例如 snow sql
,即可使用。项目定义文件中的 env
部分(通常为 snowflake.yml
)可允许您定义变量,如下所示:
definition_version: 2
env:
database: "dev"
role: "eng_rl"
将 env
部分添加到项目定义文件后,您可以将变量传递给 snow sql
命令而不是在命令行上指定变量和值。
而是使用 --variable
选项在命令行上指定数据库和角色,如下所示:
snow sql \
-q "grant usage on database <% database %> to <% role %>" \
-D "database=dev" \
-D "role=eng_rl"
您可以指定在 env
部分中定义的变量,如下所示:
snow sql -q "grant usage on database <% ctx.env.database %> to <% ctx.env.role %>"
您可以包括 env
部分,以及项目定义文件中包括的任何其他部分。
definition_version: 2
entities:
test_function:
type: "function"
stage: "dev_deployment"
artifacts: ["app/"]
handler: "functions.hello_function"
signature: ""
returns: string
hello_procedure:
type: "procedure"
stage: "dev_deployment"
artifacts: ["app/"]
handler: "procedures.hello_procedure"
signature:
- name: "name"
type: "string"
returns: string
env:
database: "dev"
role: "eng_rl"
备注
如果您当前的项目定义文件使用 definition_version: 1
且您希望利用变量功能,您必须将其更新为 definition_version: 1.1
。如果不更改该值,Snowflake CLI 会忽略 env
部分,但项目的其他类型(在此示例中为 snowpark
)仍会按预期运行。
通过设置同名(区分大小写)的 shell 环境变量,您可以覆盖在 snowflake.yml
项目定义文件中定义的任何变量。例如,要覆盖示例中定义的 database
值,可以执行以下 shell 命令:
export database="other"
有关使用 env
变量的更多信息,请参阅 在 snowflake.yml 项目定义文件中存储变量。