적용 대상:
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 카탈로그 관리 테이블(델타 또는 빙산)
- 카탈로그 관리 커밋을 사용하도록 설정
- 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없는 블록 - 트랜잭션: 트랜잭션 지원 개요
- 트랜잭션 모드: 비대화형 및 대화형 트랜잭션에 대한 자세한 패턴 및 예제