Variabler

Gäller för: Databricks Runtime check marked yes 14.1 och senare

Variabler skrivs och schemakvalificerade objekt som lagrar värden som är privata för en session. I Azure Databricks är variabler tillfälliga och deklarerade i en session med instruktionen DEKLARERA VARIABEL .

Termerna temporär variabel och sessionsvariabel är utbytbara.

Schemat där temporära variabler finns är system.session.

En variabel tas bort implicit i slutet av sessionen som definierar den. Men du kan uttryckligen släppa den tidigare med hjälp av uttrycket DROP VARIABLE .

När en variabel har definierats är NULL dess värde eller resultatet av det valfritt angivna standarduttrycket. Du kan ändra värdet för valfritt antal variabler med SET VARIABLE-instruktionen när som helst under sessionen.

När de refereras i en fråga delar variabelnamn sitt namnområde med kolumnnamn, kolumnalias och funktionsparameternamn. Variablerna är sist i lösningsordningen vid namnkonflikter.

Variabler skiljer sig semantiskt från parametermarkörer på tre sätt:

  • Parametermarkörer finns bara i en enda instruktion. Det anropande API:et måste ange värdet och typen. Variabler finns under en session, vilket gör att de kan refereras i flera instruktioner utan att behöva skicka ett värde för varje -instruktion.
  • Variabler kan ställas in utan att lämna kontexten för SQL.
  • Variabler kan refereras i organen för tillfälliga vyer och SQL-funktioner. När du refererar till en tillfällig vy eller tillfällig SQL-funktion används det aktuella värdet för alla variabler i dess brödtext.

IDR-satsen accepterar variabler som argument. På så sätt kan du parametrisera identifierare med hjälp av variabler och resultat av frågor som används för att ange dessa variabler.

Exempel

-- 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