Поделиться через


Переменные

Применимо: Databricks Runtime отмечен галочкой версии 14.1 и выше

Переменные являются типизированными и квалифицированными объектами схемы, которые хранят значения, закрытые для сеанса. В Azure Databricks переменные объявляются в сеансе как временные с помощью инструкции DECLARE VARIABLE.

Термины временная переменная и переменная сеанса взаимозаменяемы.

Схема, в которой находятся временные переменные, system.session.

Переменная удаляется неявно в конце сеанса, определяющего его. Но вы можете явно удалить его ранее с помощью инструкции DROP VARIABLE.

Когда переменная определяется, ее значение устанавливается как NULL или результат указанного по умолчанию выражения, если таковое задано. Вы можете изменить значение любого числа переменных с помощью инструкции SET VARIABLE в любое время во время сеанса.

При ссылке на имена переменных запроса совместно использовать пространство имен с именами столбцов , псевдонимами столбцов и именами параметров функции. Переменные располагаются последними в порядке разрешения в случае конфликтов имен.

Переменные отличаются семантически от маркеров параметров тремя способами:

  • Маркеры параметров существуют только в одной инструкции. Вызывающий API должен указать значение и тип. Переменные существуют в течение сеанса, что позволяет ссылаться на них в нескольких инструкциях без необходимости передавать значение для каждой инструкции.
  • Переменные можно задать без выхода из контекста SQL.
  • На переменные можно ссылаться в телах временных представлений и функций SQL. При ссылке на временное представление или временную функцию SQL будет использоваться текущее значение любой переменной в её теле.

Предложение IDENTIFIER принимает переменные в качестве аргументов. Это позволяет параметризировать идентификаторы с помощью переменных и результатов запросов, используемых для задания этих переменных.

Примеры

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