Variables

Se aplica a: Databricks Runtime check marked yes 14.1 y versiones posteriores

Las variables son objetos con tipo y asociados a un esquema que almacenan valores privados en una sesión. En Azure Databricks, las variables son temporales y se declaran dentro de una sesión mediante la instrucción DECLARE VARIABLE.

Los términos variable temporal y variable de sesión son intercambiables.

El esquema en el que residen las variables temporales es system.session.

Una variable se quita implícitamente al final de la sesión que la define. Sin embargo, puede quitarla explícitamente antes de ello mediante la instrucción DROP VARIABLE.

Cuando se define una variable, su valor es NULL o el resultado de la expresión predeterminada especificada opcionalmente. Puede modificar el valor de cualquier número de variables con la instrucción SET VARIABLE en cualquier momento durante la sesión.

Cuando se hace referencia a estos desde una consulta, los nombres de variable comparten su espacio de nombres con los nombres de columna, alias de columna y nombres de parámetro de función. Las variables se consideran al último en el orden de resolución en caso de conflictos de nombres.

Las variables difieren semánticamente de los marcadores de parámetro de tres maneras:

  • Los marcadores de parámetro solo existen dentro de una sola instrucción. La API de invocación debe proporcionar el valor y el tipo. Las variables existen durante la duración de una sesión, lo que permite hacer referencia a ellas en varias instrucciones sin necesidad de pasar un valor para cada instrucción.
  • Las variables se pueden establecer sin salir del contexto de SQL.
  • Se puede hacer referencia a las variables en los cuerpos de las vistas temporales y las funciones SQL. Cuando haga una referencia a una vista temporal o una función SQL temporal, se utilizará el valor actual de cualquier variable que esté en su cuerpo.

La cláusula IDENTIFIER acepta variables como argumentos. Esto le permite parametrizar identificadores mediante variables y resultados de consultas usadas para establecer esas variables.

Ejemplos

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