共用方式為


DECLARE VARIABLE

適用於:勾選為「是」的 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

參數

  • 或取代

    如果指定,則會取代具有相同名稱的變數。

  • variable_name

    變數的名稱。 名稱可能限定為 sessionsystem.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