トランザクション

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文の末尾にセミコロンを付けて1文以上を含む
  • 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...