Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
применимо: Databricks Runtime 16.3 и более поздних версий
Важный
Эта функция доступна в общедоступной предварительной версии.
Повторите выполнение списка инструкций для каждой строки, возвращаемой запросом.
Эта конструкция может использоваться только в составной конструкции.
Синтаксис
[ label : ] FOR [ variable_name AS ] query
DO
{ stmt ; } [...]
END FOR [ label ]
Параметры
-
Необязательная метка цикла, которая является уникальной среди всех меток для инструкций, в которых содержится оператор
FOR
. Если указана конечная метка, она должна соответствовать начальной метки. Метка может использоваться для ПРЕРВАТЬ или ИТЕРИРОВАТЬ цикл. Чтобы квалифицировать ссылки на столбцы цикла, используйтеvariable_name
, а неlabel
. -
Необязательное имя, которое можно использовать как квалификатор при ссылке на столбцы в курсоре.
stmt
Инструкция SQL
Примечания
Если запрос работает с таблицей, которая также изменяется в теле цикла, семантика зависит от источника данных.
Для таблиц Delta запрос останется без изменений.
Databricks не гарантирует полное выполнение запроса, если цикл FOR
завершается преждевременно из-за инструкции LEAVE
или условия ошибки.
Если во время выполнения запроса возникают исключения или побочные эффекты, Databricks не гарантирует, в какой момент времени в цикле они происходят.
Часто FOR
циклы можно заменить реляционными запросами, которые обычно более эффективны.
Примеры
-- sum up all odd numbers from 1 through 10
> BEGIN
DECLARE sum INT DEFAULT 0;
sumNumbers: FOR row AS SELECT num FROM range(1, 20) AS t(num) DO
IF num > 10 THEN
LEAVE sumNumbers;
ELSEIF num % 2 = 0 THEN
ITERATE sumNumbers;
END IF;
SET sum = sum + row.num;
END FOR sumNumbers;
VALUES (sum);
END;
25
-- Compare with the much more efficient relational computation:
> SELECT sum(num) FROM range(1, 10) AS t(num) WHERE num % 2 = 1;
25