變數
適用於: 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