適用対象: Databricks Runtime
14.1 以上" とマークされている
変数は型指定され、セッションにプライベートな値を格納するスキーマ修飾オブジェクトです。 Azure Databricks の変数は一時的であり、 DECLARE VARIABLE ステートメントを使用してセッション内で宣言されます。
用語一時変数とセッション変数は交換可能です。
一時変数が存在するスキーマは system.session。
変数は、変数を定義するセッションの終了時に暗黙的に削除されます。 ただし、 DROP VARIABLE ステートメントを使用して、先ほど明示的に削除できます。
変数が定義されている場合、その値は NULL されるか、必要に応じて指定された既定の式の結果になります。
SET変数ステートメントを使用して、任意の数の変数の値をセッション中にいつでも変更できます。
クエリ変数名内で参照されている場合は、名前空間を列名、列名、および関数パラメーター名と共有します。 変数は、名前の競合が発生した場合 の解決の順序 で最後になります。
変数は、次の 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