Giao dịch

Giới thiệu về Redshift

Jason Myers

Principal Engineer

Lý do dùng giao dịch

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;
Giới thiệu về Redshift

Ví dụ nhóm câu lệnh

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';
Giới thiệu về Redshift

Bảng sau khi lỗi

data_intake

name priority
idaho_monitoring_locations 1
idaho_samples 1
idaho_site_id 3
Giới thiệu về Redshift

Lợi ích và lưu ý về giao dịch

  • Kết quả dữ liệu nhất quán
  • Yêu cầu thành công hoặc thất bại cho cả nhóm truy vấn
  • Vận hành đồng thời

Hành vi mặc định

  • Mỗi câu lệnh SQL là một giao dịch!

Giao dịch ảnh hưởng một số hàm

  • Thiết lập khi bắt đầu giao dịch và giữ nguyên
    • SYSDATE, TIMESTAMP, CURRENT_DATE

Một số hàm bỏ qua giao dịch

  • Cập nhật ở mỗi lần thực thi câu lệnh
    • GETDATE, TIMEOFDAY
Giới thiệu về Redshift

Cấu trúc giao dịch

  • Mở bằng BEGIN; hoặc START TRANSACTION;
  • Chứa một hoặc nhiều câu lệnh SQL, mỗi câu kết thúc bằng dấu chấm phẩy
  • Đóng bằng END; hoặc COMMIT;
  • LƯU Ý: Dấu chấm phẩy rất quan trọng
BEGIN;

query1; query2;
END;
Giới thiệu về Redshift

Đảm bảo kết quả truy vấn nhất quán

-- Bắt đầu giao dịch
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;
-- Kết thúc giao dịch
END;
Giới thiệu về Redshift

Hành vi hàm trong giao dịch

-- Bắt đầu giao dịch
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();
-- Kết thúc giao dịch
END;
Giới thiệu về Redshift

Ayo berlatih!

Giới thiệu về Redshift

Preparing Video For Download...