Transazioni

Introduzione a Redshift

Jason Myers

Principal Engineer

Perché usare le transazioni

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;
Introduzione a Redshift

Esempio di raggruppamento di istruzioni

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';
Introduzione a Redshift

Risultati tabella con errore

data_intake

name priority
idaho_monitoring_locations 1
idaho_samples 1
idaho_site_id 3
Introduzione a Redshift

Vantaggi e considerazioni sulle transazioni

  • Dati coerenti
  • Richiedere successo o fallimento di un gruppo di query
  • Operazioni concorrenti

Comportamento predefinito

  • Ogni istruzione SQL è una transazione!

Le transazioni influenzano alcune funzioni

  • Valori fissati all'inizio e poi invariati
    • SYSDATE, TIMESTAMP, CURRENT_DATE

Alcune funzioni aggirano le transazioni

  • Valori aggiornati a ogni esecuzione
    • GETDATE, TIMEOFDAY
Introduzione a Redshift

Struttura delle transazioni

  • Inizia con BEGIN; o START TRANSACTION;
  • Contiene una o più istruzioni SQL, ognuna con punto e virgola
  • Si chiude con END; o COMMIT;
  • NOTA: i punti e virgola contano
BEGIN;

query1; query2;
END;
Introduzione a Redshift

Ottenere risultati coerenti

-- Avvia una transazione
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;
-- Termina la transazione
END;
Introduzione a Redshift

Comportamento delle funzioni nelle transazioni

-- Avvia una transazione
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();
-- Termina la transazione
END;
Introduzione a Redshift

Passons à la pratique !

Introduzione a Redshift

Preparing Video For Download...