트랜잭션

Redshift 입문

Jason Myers

Principal Engineer

트랜잭션 사용 동기

SELECT name,
       priority,
  FROM data_log
       -- SYSDATE = 2024-02-07 00:17:24.259227
 WHERE intake_ts < SYSDATE;

SELECT name,
       data_size,
  FROM data_details
       -- SYSDATE = 2024-02-07 00:18:04.830527
 WHERE current_intake_date < SYSDATE;
Redshift 입문

문장 그룹화 예시

data_intake

name priority
idaho_monitoring_locations 1
idaho_samples 2
idaho_site_id 3
UPDATE data_intake 
   SET priority=1 
 WHERE name='idaho_samples';

UPDATE data_intake 
   SET priority=2 
 WHERE name='idaho_monitoring_locations';
Redshift 입문

오류가 난 테이블 결과

data_intake

name priority
idaho_monitoring_locations 1
idaho_samples 1
idaho_site_id 3
Redshift 입문

트랜잭션의 장점과 고려사항

  • 데이터 결과의 일관성
  • 쿼리 묶음의 전부 성공 또는 실패 보장
  • 동시 작업 처리

기본 실행 동작

  • 각 SQL 문은 자체 트랜잭션입니다!

트랜잭션이 영향을 주는 함수

  • 트랜잭션 시작 시 설정되어 유지됨
    • SYSDATE, TIMESTAMP, CURRENT_DATE

트랜잭션을 우회하는 함수

  • 각 문 실행 시마다 설정
    • GETDATE, TIMEOFDAY
Redshift 입문

트랜잭션 구조

  • BEGIN; 또는 START TRANSACTION;으로 시작
  • 각 SQL 문 끝에 세미콜론을 붙여 하나 이상 포함
  • END; 또는 COMMIT;으로 종료
  • 참고: 세미콜론이 중요합니다
BEGIN;

query1; query2;
END;
Redshift 입문

일관된 쿼리 결과 얻기

-- 트랜잭션 시작
BEGIN;
SELECT name,
       priority,
  FROM data_log
       -- SYSDATE = 2024-02-07 00:17:24.259227
 WHERE intake_ts < SYSDATE;

SELECT name,
       data_size,
  FROM data_details
       -- SYSDATE = 2024-02-07 00:17:24.259227
 WHERE current_intake_date < SYSDATE;
-- 트랜잭션 종료
END;
Redshift 입문

트랜잭션에서의 함수 동작

-- 트랜잭션 시작
BEGIN;
SELECT name,
       priority,
  FROM data_intake
       -- GETDATE = 2024-02-07 00:17:24.259227
 WHERE data_intake_ts < GETDATE();

 SELECT name,
       data_size,
  FROM data_details
       -- GETDATE = 2024-02-07 00:18:44.830527
 WHERE current_intake_date < GETDATE();
-- 트랜잭션 종료
END;
Redshift 입문

Ayo berlatih!

Redshift 입문

Preparing Video For Download...