Proměnné
platí pro: Databricks Runtime 14.1 a vyšší
Proměnné jsou typové a schématu kvalifikované objekty, které ukládají hodnoty, které jsou privátní pro relaci. V Azure Databricks jsou proměnné dočasné a deklarují se v rámci relace pomocí příkazu DECLARE VARIABLE.
Termíny dočasná proměnná a relační proměnná jsou zaměnitelné.
Schéma, ve kterém jsou uloženy dočasné proměnné, je system.session
.
Proměnná se implicitně zahodí na konci relace, která ji definuje. Můžete ho ale explicitně odstranit pomocí příkazu DROP VARIABLE.
Pokud je proměnná definována, je její hodnota NULL
nebo výsledek volitelně zadaného výchozího výrazu.
Hodnotu libovolného počtu proměnných můžete upravit pomocí příkazu SET VARIABLE kdykoli během relace.
Při odkazování v rámci dotazu názvy proměnných sdílet jejich obor názvů s názvy sloupců , aliasy sloupcůa názvy parametrů funkce. Proměnné jsou poslední v pořadí při řešení v případě konfliktů jmen.
Proměnné se sémanticky liší od parametrických značek třemi způsoby:
- Značky parametrů existují pouze v rámci jednoho příkazu. Vyvolání rozhraní API musí zadat hodnotu a typ. Proměnné existují po dobu trvání relace, což jim umožňuje odkazovat ve více příkazech, aniž by bylo nutné předat hodnotu pro každý příkaz.
- Proměnné lze nastavit bez opuštění kontextu SQL.
- Proměnné lze použít v rámci dočasných pohledů a funkcí SQL. Když odkazujete na dočasné zobrazení nebo dočasnou funkci SQL, použije se aktuální hodnota libovolné proměnné v jejím těle.
Klauzule IDENTIFIER přijímá proměnné jako argumenty. To vám umožní parametrizovat identifikátory pomocí proměnných a výsledků dotazů použitých k nastavení těchto proměnných.
Příklady
-- 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