Transactions

Introduction à Redshift

Jason Myers

Principal Engineer

Pourquoi utiliser des transactions

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;
Introduction à Redshift

Exemple de regroupement d'instructions

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';
Introduction à Redshift

Résultats avec erreur dans la table

data_intake

name priority
idaho_monitoring_locations 1
idaho_samples 1
idaho_site_id 3
Introduction à Redshift

Atouts et points d'attention des transactions

  • Résultats de données cohérents
  • Exiger la réussite ou l'échec d'un groupe de requêtes
  • Opérations simultanées

Comportement d'exécution par défaut

  • Chaque instruction SQL est une transaction !

Les transactions influent sur certaines fonctions

  • Fixées au début de la transaction et restent identiques
    • SYSDATE, TIMESTAMP, CURRENT_DATE

Certaines fonctions contournent les transactions

  • Évaluées à chaque exécution d'instruction
    • GETDATE, TIMEOFDAY
Introduction à Redshift

Structure des transactions

  • Ouvrir avec BEGIN; ou START TRANSACTION;
  • Contient une ou plusieurs instructions SQL, chacune terminée par un point-virgule
  • Fermer avec END; ou COMMIT;
  • NOTE : les points-virgules comptent
BEGIN;

query1; query2;
END;
Introduction à Redshift

Obtenir des résultats de requête cohérents

-- 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;
Introduction à Redshift

Comportement des fonctions en transaction

-- 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;
Introduction à Redshift

Passons à la pratique !

Introduction à Redshift

Preparing Video For Download...