適用於:
Databricks SQL
Databricks Runtime 14.1 和以上版本
建立工作階段私有的暫存變數,您可以在任何可以使用 常數運算式 的地方參考。 您也可以將變數與 IDENTIFIER 子句搭配使用, 來參數化 SQL 語句中的標識符。
變數會使用 SET VARIABLE 語句來修改。
暫存變數無法在以下範疇內參考:
- 檢查條件約束
- 生成的欄位
- 默認表達式
- 持久化 SQL UDF 的主體
- 持久化視圖的內容
暫存變數也稱為 會話 變數。
語法
DECLARE [ OR REPLACE ] [ VARIABLE ] variable_name [, ...]
[ data_type ] [ { DEFAULT | = } default_expression ]
在 Databricks Runtime 17.2 之前,您一次只能指定一個 variable_name 。
參數
或取代
如果指定,則會取代具有相同名稱的變數。
-
變數的名稱。 名稱可能限定為
session或system.session。 除非指定,否則OR REPLACE變數名稱在階段作業內必須是唯一的,且不得與陳述式中的任何其他變數名稱重複。 -
任何支援的數據類型。 如果
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
-- Declaring multiple variables
> DECLARE var1, var2 DOUBLE DEFAULT rand();
> VALUES (var1, var2);
0.3745401188473625 0.3745401188473625
-- 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