在 SQL 中使用变量

备注

对变量的支持需要项目定义版本 1.1。

您还可以使用项目文件来定义其他命令的变量,例如 snow sql,即可使用。项目定义文件中的 env 部分(通常为 snowflake.yml)可允许您定义变量,如下所示:

definition_version: 2
env:
  database: "dev"
  role: "eng_rl"
Copy

env 部分添加到项目定义文件后,您可以将变量传递给 snow sql 命令而不是在命令行上指定变量和值。

而是使用 --variable 选项在命令行上指定数据库和角色,如下所示:

snow sql \
-q "grant usage on database <% database %> to <% role %>" \
-D "database=dev" \
-D "role=eng_rl"
Copy

您可以指定在 env 部分中定义的变量,如下所示:

snow sql -q "grant usage on database <% ctx.env.database %> to <% ctx.env.role %>"
Copy

您可以包括 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"
Copy

备注

如果您当前的项目定义文件使用 definition_version: 1 且您希望利用变量功能,您必须将其更新为 definition_version: 1.1。如果不更改该值,Snowflake CLI 会忽略 env 部分,但项目的其他类型(在此示例中为 snowpark)仍会按预期运行。

通过设置同名(区分大小写)的 shell 环境变量,您可以覆盖在 snowflake.yml 项目定义文件中定义的任何变量。例如,要覆盖示例中定义的 database 值,可以执行以下 shell 命令:

export database="other"
Copy

有关使用 env 变量的更多信息,请参阅 在 snowflake.yml 项目定义文件中存储变量

语言: 中文