变量

适用于:Databricks Runtime 勾选标记为“是” 14.1 及更高版本

变量是类型化对象和架构限定对象,这些对象存储对会话私有的值。 在 Azure Databricks 变量中,是临时的,使用 DECLARE VARIABLE 语句在会话中声明。

临时变量会话变量 的术语是可互换的。

临时变量所在的模式是 system.session

变量在定义变量的会话结束时隐式删除。 不过,你也可以更早地使用 DROP VARIABLE 语句来显式删除它。

定义变量时,其值为 NULL 或为根据可选指定的默认表达式的结果。 可以在会话期间随时使用 SET VARIABLE 语句修改任意数量的变量的值。

当在查询中引用时,变量名称列名列别名函数参数名称共享它们的命名空间。 在名称冲突的情况下,变量在解决顺序 中是最后一个。

在语义上,变量与 参数标记 存在三种不同:

  • 参数标记仅存在于单个语句中。 调用 API 必须提供值和类型。 变量存在于会话的持续时间内,允许在多个语句中引用变量,而无需为每个语句传递值。
  • 可以在不离开 SQL 上下文的情况下设置变量。
  • 可以在临时视图和 SQL 函数的主体中引用变量。 引用临时视图或临时 SQL 函数时,将使用其正文中任何变量的当前值。

IDENTIFIER 子句 接受变量作为参数。 这样,您可以使用变量以及用于设置这些变量的查询结果来参数化 标识符

例子

-- A verbose definition of a temporary variable
> DECLARE OR REPLACE VARIABLE myvar INT DEFAULT 17;

-- A dense definition, including derivation of the type from the default expression
> DECLARE address = named_struct('street', 'Grimmauld Place', 'number', 12);

-- Referencing a variable
> SELECT myvar, session.address.number;
 17  12

-- Setting a single variable
> SET VAR myvar = (SELECT max(c1) FROM VALUES (1), (2) AS t(c1));
> SELECT myvar;
  2

-- Setting multiple variables
> SET VAR (myvar, address) = (SELECT address.number, named_struct('street', address.street, 'number', 10));
> SELECT myvar, address;
  12    {"street":"Grimmauld Place","number":10}

-- Drop a variable
> DROP TEMPORARY VARIABLE myvar;
> DROP TEMPORARY VARIABLE IF EXISTS address;

-- Use the IDENTIFIER clause with a variable
> DECLARE view = 'tempv';
> CREATE OR REPLACE TEMPORARY VIEW IDENTIFIER(view) (c1) AS SELECT 1;
> SELECT * FROM IDENTIFIER(view);
  1