變數

適用於: Databricks Runtime check marked yes 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