Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Применяется к:
Databricks SQL
Databricks Runtime 18.0 и более поздних версий
Реализует блок скрипта SQL, который может содержать последовательность инструкций SQL, инструкций управления потоком, объявлений локальных переменных и обработчиков исключений. При пометке как ATOMIC, блок выполняется как транзакционная единица, в которой либо все операции завершаются успешно, либо все завершаются сбоем.
Синтаксис
BEGIN ATOMIC
statement1;
statement2;
...
END;
Параметры
Нет. Ключевое ATOMIC слово изменяет поведение составного оператора .
Описание
Помечает составную инструкцию как блок атомарных транзакций. Все инструкции в блоке выполняются как единая транзакция: либо все инструкции успешно выполняются вместе, либо все изменения откатываются в случае ошибки любой инструкции. Azure Databricks автоматически фиксирует изменения при успешном завершении блока или откатывает все изменения при сбое любой инструкции.
BEGIN ATOMIC ... END блоки могут быть вложены в другие атомарные блоки. Внутренний блок встраивается во внешнюю транзакцию — все операции выполняются как часть одной более крупной транзакции. Это не вложенная транзакция. Атомарный блок не может содержать не атомарный BEGIN ... END блок.
Это неинтерактивная транзакция— вам не нужно запускать COMMIT или ROLLBACK вручную.
Требования
- Все таблицы, используемые в многооператорной и многотабличной транзакции, должны:
- Управляемые таблицы каталога Unity (Delta или Iceberg)
- Активируйте фиксации, управляемые каталогом
- Используйте хранилище SQL, бессерверные вычисления или кластер под управлением Databricks Runtime 18.0 и более поздней версии.
- Необходимо иметь соответствующие разрешения на объекты, измененные в рамках транзакции. Привилегии проверяются при выполнении каждой инструкции.
Примеры
В следующих примерах показаны распространенные шаблоны транзакций с помощью BEGIN ATOMIC ... END;.
Координация обновлений между несколькими таблицами
BEGIN ATOMIC
UPDATE accounts SET balance = balance - 100 WHERE id = 1;
UPDATE accounts SET balance = balance + 100 WHERE id = 2;
INSERT INTO audit_log VALUES (1, 2, 100, current_timestamp());
END;
Проверка данных перед коммитом
BEGIN ATOMIC
INSERT INTO staging_customers
SELECT * FROM external_source WHERE ingest_date = current_date();
IF (SELECT COUNT(*) FROM staging_customers WHERE email NOT LIKE '%@%') > 0 THEN
SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'Invalid email addresses found';
END IF;
MERGE INTO customers AS target
USING staging_customers AS source
ON target.customer_id = source.customer_id
WHEN MATCHED THEN UPDATE SET *
WHEN NOT MATCHED THEN INSERT *;
END;
Связанные статьи
- BEGIN TRANSACTION: запуск интерактивной транзакции с ручным управлением фиксацией и откатом
- COMMIT: фиксация интерактивной транзакции
- ROLLBACK: откат интерактивной транзакции
-
Составная инструкция:
BEGIN ... ENDблоки без ключевогоATOMICслова - Транзакции: обзор поддержки транзакций
- Режимы транзакций: подробные шаблоны и примеры для неинтерактивных и интерактивных транзакций