Sdílet prostřednictvím


Proměnné

Platí pro: Databricks Runtime check marked yes 14.1 a vyšší

Proměnné jsou typové a schématu kvalifikované objekty, které ukládají hodnoty, které jsou privátní pro relaci. Proměnné Azure Databricks jsou dočasné a deklarované v rámci relace pomocí příkazu DECLARE VARIABLE .

Termíny dočasné proměnné a proměnné relace jsou zaměnitelné.

Schéma, ve kterém se nacházejí dočasné proměnné, je system.session.

Proměnná se implicitně zahodí na konec relace, která ji definuje. Můžete ho ale explicitně odstranit pomocí příkazu DROP VARIABLE .

Pokud je proměnná definována, je NULL její hodnota 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í na názvy proměnných dotazu sdílejí jejich obor názvů s názvy sloupců, aliasy sloupců a názvy parametrů funkce. Proměnné jsou poslední v pořadí řešení v případě konfliktů názvů.

Proměnné se od značek parametrů liší 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 odkazovat v těle dočasných zobrazení 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 umožňuje 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