声明变量
描述
DECLARE VARIABLE
语句用于在 Spark 中创建临时变量。临时变量的作用域为会话级别。
您可以在允许常量表达式的任何地方通过变量名引用变量。除非您使用 session
或 system.session
限定变量,否则 Spark 只有在无法将名称解析为列或列别名时,才会解析变量。
临时变量不能在持久化对象中引用,例如持久化视图、列默认表达式和生成列表达式。
语法
DECLARE [ OR REPLACE ] [ VAR | VARIABLE ]
variable_name [ data_type ] [ { DEFAULT | = } default_expr ]
参数
-
OR REPLACE
如果指定,则在存在时替换预先存在的临时变量。
-
variable_name
指定要创建的变量的名称。变量名称可以可选地通过
system
.session
或session
进行限定。语法:
[ system . [ session .] ] variable_name
-
data_type
可选地定义变量的数据类型。如果未指定,则类型从默认表达式派生。
-
default_expr
一个可选表达式,用于在声明后初始化变量的值。每当使用 SET VAR 将变量重置为
DEFAULT
时,都会重新评估该表达式。如果指定了data_type
,则default_expr
必须能够转换为变量类型。如果未指定data_type
,则必须指定一个默认值,其类型将成为变量的类型。如果没有给出默认表达式,变量将使用NULL
初始化。
示例
-- The dense form of declaring a variable with default
DECLARE five = 5;
-- Declare a defined variable
DECLARE five = 55;
[VARIABLE_ALREADY_EXISTS] Cannot create the variable `system`.`session`.`five` because it already exists.
Choose a different name, or drop or replace the existing variable. SQLSTATE: 42723
-- Use `DECLARE OR REPLACE` to declare a defined variable
DECLARE OR REPLACE five = 55;
-- Explicitly declare the default value of a variable using the keyword `DEFAULT`
DECLARE VARIABLE size DEFAULT 6;
-- STRING variable initialized to `NULL`
DECLARE some_var STRING;