Transakcje

Wprowadzenie do Redshift

Jason Myers

Principal Engineer

Motywacja do stosowania transakcji

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;
Wprowadzenie do Redshift

Przykład grupowania poleceń

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';
Wprowadzenie do Redshift

Błędne wyniki tabeli

data_intake

name priority
idaho_monitoring_locations 1
idaho_samples 1
idaho_site_id 3
Wprowadzenie do Redshift

Zalety i aspekty transakcji

  • Spójne wyniki danych
  • Wymaganie sukcesu lub porażki dla grupy zapytań
  • Operacje współbieżne

Domyślne zachowanie wykonania

  • Każde polecenie SQL jest transakcją!

Transakcje wpływają na niektóre funkcje

  • Ustawiane na początku transakcji i pozostają niezmienne
    • SYSDATE, TIMESTAMP, CURRENT_DATE

Niektóre funkcje omijają transakcje

  • Ustawiane przy każdym wykonaniu polecenia
    • GETDATE, TIMEOFDAY
Wprowadzenie do Redshift

Struktura transakcji

  • Otwiera BEGIN; lub START TRANSACTION;
  • Zawiera jedno lub więcej poleceń SQL zakończonych średnikiem
  • Zamyka END; lub COMMIT;
  • UWAGA: Średniki mają znaczenie
BEGIN;

query1; query2;
END;
Wprowadzenie do Redshift

Spójne wyniki zapytań

-- Start a transaction
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 a transaction
END;
Wprowadzenie do Redshift

Zachowanie funkcji w transakcjach

-- Start a transaction
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 a transaction
END;
Wprowadzenie do Redshift

Czas na ćwiczenia!

Wprowadzenie do Redshift

Preparing Video For Download...