주요 컨텐츠로 이동

복수 문 트랜잭션

Databricks 무료로 시작하기

Databricks Delta 테이블의 복수 문 트랜잭션

Databricks는 기본 테이블이 Databricks Delta 테이블인 경우 복수 문(multi-statement) 트랜잭션을 지원합니다.  다시 말해 트랜잭션 내에 속한 모든 문이 원자성(atomic)입니다(모두 성공 또는 모두 실패).

두 가지 스레드/사용자를 예로 든 다음 타임라인을 보겠습니다. Thread 1은 UPDATE 스레드이고 Thread 2는 리더/쿼리 스레드입니다.

  • thread 1 - START TRANSACTION ON t1
  • thread 1 - INSERT INTO t1 SELECT ... FROM t2 where id = 42 /* add some rows*/
  • thread 2 - SELECT a FROM t1 WHERE id = 42
  • thread 1 - UPDATE t1 SET a = val2 WHERE id = 42 /*update some rows */
  • thread 1 - COMMIT

이 예시에서는 테이블 t1에 행 몇 개를 새로 추가하고 표 t1의 기존 행 몇 개를 업데이트하고자 합니다. 여기에서는 이를 하나의 논리적 트랜잭션으로 만들고자 하며, Databricks Delta가 복수 문 트랜잭션을 지원하기 때문에 Thread 2에는 새로 삽입한 행이 표시되지 않습니다. 대신 START TRANSACTION 명령 전에 있던 테이블 뷰가 표시됩니다.  이것은 복수 문 트랜잭션을 사용하지 않으면 불가능한 일입니다. 복수 문 트랜잭션이 아니라면 INSERT와 UPDATE 둘 다 독립된, 그러면서도 원자성 작업으로 취급되었을 것이기 때문입니다.  복수 문 트랜잭션을 사용하면 INSERT와 UPDATE가 하나의 원자성 작업으로 취급되기 때문에(둘 다 성공하거나 둘 다 실패함) 다른 사용자에게는 “부분 트랜잭션”이 표시되지 않습니다.

    용어집으로 돌아가기