変数

適用対象: Databricks Runtime check marked yes14.1 以降

変数とは、型指定され、スキーマで修飾されたオブジェクトであり、セッションに対してプライベートな値が格納されます。 Azure Databricks では、変数は一時的であり、DECLARE VARIABLE ステートメントを使用してセッション内で宣言されます。

"一時変数" という用語と "セッション変数" という用語は、どちらを使っても同じです。

一時変数が存在するスキーマは system.session です。

変数は、その変数が定義されたセッションの終了時に暗黙的に削除されます。 ただし、DROP VARIABLE ステートメントを使用して、それよりも早く明示的に削除することができます。

変数が定義されると、その値は NULL になるか、必要に応じて指定された既定の式の結果になります。 SET VARIABLE ステートメントを使用して、任意の数の変数の値をセッション中にいつでも変更できます。

クエリ内で参照されるとき、変数名は、列名列別名、および関数パラメーター名と名前空間を共有します。 名前の競合が発生した場合、変数の解決順序は最後です。

変数はパラメーター マーカーとは次の 3 つの点で意味的に異なります。

  • パラメーター マーカーは、1 つのステートメント内にのみ存在します。 呼び出し元の 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