Partilhar via


Variáveis

Aplica-se a: Databricks Runtime check marked yes 14.1 e superior

As variáveis são digitadas e objetos qualificados pelo esquema que armazenam valores que são privados para uma sessão. No Azure Databricks, as variáveis são temporárias e declaradas dentro de uma sessão usando a instrução DECLARE VARIABLE .

Os termos variável temporária e variável de sessão são intercambiáveis.

O esquema no qual as variáveis temporárias residem é system.session.

Uma variável é descartada implicitamente no final da sessão que a define. Mas você pode soltá-lo explicitamente mais cedo usando a instrução DROP VARIABLE .

Quando uma variável é definida, seu valor é NULL ou o resultado da expressão padrão especificada opcionalmente. Você pode modificar o valor de qualquer número de variáveis com a instrução SET VARIABLE a qualquer momento durante a sessão.

Quando referenciados em uma consulta, os nomes de variáveis compartilham seu namespace com nomes de coluna, aliases de coluna e nomes de parâmetros de função. As variáveis são as últimas na ordem de resolução em caso de conflitos de nomes.

As variáveis diferem semanticamente dos marcadores de parâmetros de três maneiras:

  • Os marcadores de parâmetro só existem dentro de uma única instrução. A API de invocação deve fornecer o valor e o tipo. As variáveis existem durante uma sessão, permitindo que sejam referenciadas em várias instruções sem a necessidade de passar um valor para cada instrução.
  • As variáveis podem ser definidas sem sair do contexto do SQL.
  • As variáveis podem ser referenciadas nos corpos de exibições temporárias e funções SQL. Quando você faz referência a uma exibição temporária ou função SQL temporária, o valor atual de qualquer variável em seu corpo será usado.

A cláusula IDENTIFIER aceita variáveis como argumentos. Isso permite parametrizar identificadores usando variáveis e resultados de consultas usadas para definir essas variáveis.

Exemplos

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