DECLARE VARIABLE

适用于:check marked yesDatabricks Runtime 14.1 及更高版本

创建一个会话专用的临时变量,你可以在任何可以使用常数表达式的位置引用该变量。 还可以将变量与 IDENTIFIER 子句结合使用,在 SQL 语句中将标识符参数化。

使用 SET VARIABLE 语句修改变量。

不能在以下范围内引用临时变量:

  • 检查约束,
  • 生成的列,
  • 默认表达式,
  • 持久化 SQL UDF 的正文,
  • 持久化视图的正文。

临时变量也称为会话变量。

语法

DECLARE [ OR REPLACE ] [ VARIABLE ] variable_name
    [ data_type ] [ { DEFEAULT | = } default_expression ]

参数

  • OR REPLACE

    如果已指定,将替换同名的变量。

  • variable_name

    变量的名称。 该名称可以使用 sessionsystem.session 进行限定。 除非指定了 OR REPLACE,否则该名称在会话中必须是唯一的。

  • data_type

    支持的任何数据类型。 如果省略了 data_type,则必须指定 DEFAULT,并且类型派生自 default_expression

  • DEFAULT default_expression= default_expression

    定义创建后变量的初始值。 default_expression 必须可强制转换为 data_type。 如果未指定任何默认值,则使用 NULL 初始化变量。

    如果表达式包含一个子查询,Azure Databricks 将引发 INVALID_DEFAULT_VALUE.SUBQUERY_EXPRESSION 错误。

示例

-- Create a variable with a default
> DECLARE VARIABLE myvar INT DEFAULT 5;
> VALUES (myvar);
 5

-- Setting a variable
> SET VAR myvar = (SELECT sum(c1) FROM VALUES(1), (2) AS T(c1);
> VALUES (myvar);
 3

-- Variables are the outermost scope.
> SELECT myvar, t.myvar, session.myvar FROM VALUES(1) AS T(myvar);
  1  1  3

> DROP TEMPORARY VARIABLE myvar;

-- A minimalist variable declaration
> DECLARE myvar = 5;
> VALUES (myvar);
 5

-- Using a variable with an IDENTIFIER clause
> DECLARE colname STRING;
> SET VAR colname = 'c1';
> SELECT IDENTIFIER(colname) FROM VALUES(1, 2) AS T(c1, c2);
  1

> SET VAR colname = 'c2';
> SELECT IDENTIFIER(colname) FROM VALUES(1, 2) AS T(c1, c2);
  2