Zmienne
Dotyczy: Databricks Runtime 14.1 i nowsze
Zmienne są typizowane i kwalifikowane obiekty schematu, które przechowują wartości prywatne w sesji. W zmiennych usługi Azure Databricks są tymczasowe i zadeklarowane w ramach sesji przy użyciu instrukcji DECLARE VARIABLE .
Terminy zmienna tymczasowa i zmienna sesji są zamienne.
Schemat, w którym znajdują się zmienne tymczasowe, to system.session
.
Zmienna jest porzucana niejawnie na końcu sesji, która ją definiuje. Można jednak jawnie usunąć ją wcześniej przy użyciu instrukcji DROP VARIABLE .
Gdy zmienna jest zdefiniowana, jej wartość to NULL
lub wynik opcjonalnego wyrażenia domyślnego.
Wartość dowolnej liczby zmiennych można zmodyfikować za pomocą instrukcji SET VARIABLE w dowolnym momencie podczas sesji.
W przypadku przywoływanie w nazwach zmiennych kwerendy współużytkuje swoją przestrzeń nazw z nazwami kolumn, aliasami kolumn i nazwami parametrów funkcji. Zmienne są ostatnie w kolejności rozwiązywania w przypadku konfliktów nazw.
Zmienne różnią się semantycznie od znaczników parametrów na trzy sposoby:
- Znaczniki parametrów istnieją tylko w ramach jednej instrukcji. Wywoływany interfejs API musi podać wartość i typ. Zmienne istnieją przez czas trwania sesji, co pozwala na odwołowanie się do nich w wielu instrukcjach bez konieczności przekazywania wartości dla każdej instrukcji.
- Zmienne można ustawić bez opuszczania kontekstu języka SQL.
- Zmienne można odwoływać się do treści widoków tymczasowych i funkcji SQL. Jeśli odwołujesz się do widoku tymczasowego lub tymczasowej funkcji SQL, zostanie użyta bieżąca wartość dowolnej zmiennej w jej treści.
Klauzula IDENTIFIER akceptuje zmienne jako argumenty. Dzięki temu można sparametryzować identyfikatory przy użyciu zmiennych i wyników zapytań używanych do ustawiania tych zmiennych.
Przykłady
-- 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