DEA / ドメイン2 データストア管理

重要な内容

Redshift へのロードとアンロード

の性能は、データをどう入れて、どう出すかで大きく変わります。 では、 から で並列にロードし、 で S3 へ並列に書き出すのが基本です。DEA-C01 では、S3 と Redshift の間のロードとアンロード (スキル 2.3.1) を中心に、COPY の速くする工夫、S3 からの自動コピー、・ からのストリーミング取り込み、ステージングテーブルと による upsert が問われます。

Point
  • COPY: S3 などのファイルを Redshift のテーブルへ並列に読み込む SQL コマンドです。
  • UNLOAD: クエリの結果を S3 へ並列に書き出す SQL コマンドです。
  • upsert = update + insert です。キーが既にあれば更新し、なければ挿入します。

概要

概要の図 COPYIAM ロール MERGE / INSERT SELECT ストリーミング取り込み UNLOADParquet・パーティション S3CSV・JSON・Parquet ステージングテーブル 本番テーブル Kinesis Data StreamsMSK マテリアライズドビュー S3 データレイク
方法向くケース
のファイルを一括でロードする (最も速く、推奨の方法)
S3 からの自動コピー (COPY JOB)S3 に届くファイルを、パイプラインを作らずに自動でロードし続ける
ストリーミング取り込み や のデータを、S3 を経由せず秒〜分の遅れで取り込む
統合・・ などの運用データを自動で複製する (「 (CDC) と zero-ETL」の章)
INSERT INTO … SELECT 内や の外部テーブルからテーブルへ移す
1行ずつの INSERT少量のだけ。大量のロードには使わない
結果を S3 へ書き出して、他のサービスと共有・する

主要技術

①COPY コマンド ⚠️ 頻出

COPY sales
FROM 's3://lake/curated/sales/2026/10/17/'
IAM_ROLE 'arn:aws:iam::111122223333:role/RedshiftLoadRole'
FORMAT AS PARQUET;
要素内容
認可クラスターまたは Serverless の名前空間に関連付けた ロールを IAM_ROLE で指定する。を に書かない
読み込み元 (最も一般的)、、、 で接続するリモートホスト
形式CSV、区切り文字、固定長、、、、。圧縮 (gzip、bzip2、zstd など) を読める
エラーの扱いMAXERROR で許す不良行の数を決める。失敗の内容は STL_LOAD_ERRORS / SYS_LOAD_ERROR_DETAIL で調べる
統計と圧縮空のテーブルへの初回ロードでは、圧縮エンコーディングと統計を自動で設定できる

は、ファイルを各スライスへ割り当てて並列に読みます。速くするには次のようにします。

工夫理由
1つの大きなファイルを、スライス数の倍数の個数に分ける1ファイルは1スライスしか読めない。分けると全スライスが同時に働く
分けたファイルの大きさをそろえる (圧縮後に 1 MB〜1 GB 程度)遅いスライスに全体が引きずられない
ファイルを圧縮する、列指向形式にする読む量が減る
1回の COPY でまとめて読む (テーブルごとに1つの COPY)小さな COPY を何度も並べると遅く、コミットも増える

DynamoDB から COPY するときは、テーブルの読み取り容量を消費するため、READRATIO で使う割合を抑えるか、DynamoDB を S3 へエクスポートしてから COPY します。


②マニフェストファイル

マニフェストは、ロードするファイルの一覧を で明示するファイルです。

使いどころ理由
プレフィックスの下にロードしてはいけないファイルが混じる一覧にあるファイルだけを読む
必ずすべてのファイルを読み込みたいmandatory: true を付けると、ファイルが見つからないとき が失敗する
別のにあるファイルをまとめて読む複数の場所を1回の COPY で読める

のプレフィックスを指定するだけの COPY は、同じプレフィックスで始まる別のファイル (例: sales_backup) まで読んでしまうことがあります。正確にロードしたいときはマニフェストを使います。


③S3 からの自動コピー (COPY JOB)

イベント統合を作り、 に JOB CREATE ... AUTO ON を付けると、S3 の指定したパスに新しいファイルが届くたびに が自動で COPY を実行します。

COPY public.orders
FROM 's3://lake/landing/orders/'
IAM_ROLE 'arn:aws:iam::111122223333:role/RedshiftLoadRole'
FORMAT AS CSV
JOB CREATE orders_autocopy
AUTO ON;
特徴内容
重複の防止どのファイルをロード済みかを Redshift が記録し、同じファイルを二度読まない
前提S3 と Redshift が同じ。バケットポリシー、Redshift のリソースポリシー、 ロールの許可が必要
監視SYS_COPY_JOB、SYS_COPY_JOB_DETAIL、SYS_LOAD_ERROR_DETAIL で状況とエラーを見る
制約送信元バケットに、オブジェクト作成の既存のイベント通知があると作れない

や でロードの仕組みを作らずに、届いたファイルを継続的にロードしたいときに選びます。


④ストリーミング取り込み ⚠️ 頻出

自身が や のコンシューマーとなり、レコードをへ直接取り込みます。 のような一時的な置き場を挟みません。

CREATE EXTERNAL SCHEMA kds
FROM KINESIS
IAM_ROLE 'arn:aws:iam::111122223333:role/RedshiftStreamRole';

CREATE MATERIALIZED VIEW clicks_mv AUTO REFRESH YES AS
SELECT approximate_arrival_timestamp,
       JSON_PARSE(kinesis_data) AS payload
FROM kds."click-stream";
注意点内容
自動更新AUTO REFRESH YES を指定すると、届いたデータを継続的に取り込む (既定は手動更新)
の扱い列ごとに JSON_EXTRACT_PATH_TEXT で取り出すと遅い。JSON_PARSE で SUPER 型にしてから PartiQL で取り出す
1つのストリームに1つのビュー同じストリームに複数のビューを作ると、それぞれがコンシューマーになりと費用が増える
結合ストリーミング用のビューでは結合できない。別のビューやテーブルで結合する
一度だけの処理シーケンス番号やオフセットで、各レコードを一度だけ取り込む
圧縮圧縮されたレコードは扱えない。送る前に展開する

で S3 へ書いてから する構成より、遅れが小さく、部品も少なくなります。


⑤ステージングテーブルと MERGE による upsert ⚠️ 頻出

には主キーの一意性を強制する仕組みがありません (主キーは宣言できますが、重複は防げません)。同じデータを二度ロードすると、行が重複します。差分データを反映するときは、いったんステージングテーブルにロードしてから します。

BEGIN;
CREATE TEMP TABLE stage (LIKE customers);
COPY stage FROM 's3://lake/cdc/customers/2026-10-17/'
IAM_ROLE 'arn:aws:iam::111122223333:role/RedshiftLoadRole'
FORMAT AS PARQUET;

MERGE INTO customers
USING stage s ON customers.customer_id = s.customer_id
WHEN MATCHED THEN UPDATE SET name = s.name, email = s.email
WHEN NOT MATCHED THEN INSERT VALUES (s.customer_id, s.name, s.email);
END;

MERGE を使わない場合は、同じトランザクションの中で「ステージングにあるキーを本番から DELETE → ステージングから INSERT」を行います。トランザクションにすると、途中の状態が他のクエリから見えません。


⑥UNLOAD コマンド

UNLOAD ('SELECT * FROM sales WHERE sale_date < ''2025-01-01''')
TO 's3://lake/archive/sales/'
IAM_ROLE 'arn:aws:iam::111122223333:role/RedshiftUnloadRole'
FORMAT AS PARQUET
PARTITION BY (sale_year);
オプション内容
FORMAT AS PARQUET / CSV / 既定はパイプ区切りのテキスト。 はテキストより書き出しが速く、 の容量も小さい
PARTITION BYHive 形式 (sale_year=2024/) のフォルダに分けて書き出す
PARALLEL既定は ON。スライスごとに並列でファイルを書く。OFF にすると1つずつ順に書く
MAXFILESIZE1ファイルの最大サイズ (5 MB〜6.2 GB、既定 6.2 GB)
MANIFEST書き出したファイルの一覧を作る
暗号化既定で 。_KEY_ID と ENCRYPTED で
ALLOWOVERWRITE / CLEANPATH既存のファイルを上書きする / 書き出す前に消す

はカタログへ登録しません。書き出したデータを や から読むには、を実行するか、ALTER TABLE ADD PARTITION で登録します。古いデータを UNLOAD で S3 へ移し、Spectrum の外部テーブルとして読み続ける構成は、 のストレージを減らす定石です。


試験対策

①判断マトリクス

問題文のキーワード選ぶもの
の大量ファイルを最速でロード (ファイルを分割し、スライス数の倍数・同じ大きさに)
1つの巨大な CSV のロードが遅いファイルを分割して圧縮する
特定のファイルだけ、または全ファイルを確実にロードマニフェストファイル
S3 に届くファイルを仕組みなしで自動ロードS3 イベント統合 + COPY JOB (自動コピー)
/ のデータを数秒〜数分で分析ストリーミング取り込み ()
差分データで既存の行を更新・挿入ステージングテーブル +
同じファイルを二度ロードして重複した主キーは強制されない。ステージング + MERGE、自動コピーの重複防止
結果を他のサービスと共有、古いデータを (、PARTITION BY)
COPY の失敗の原因を調べるSTL_LOAD_ERRORS / SYS_LOAD_ERROR_DETAIL
の本番テーブルに負荷をかけたくないS3 へエクスポートしてから COPY、または READRATIO

②よくある誤答

  • 大量のデータを INSERT 文で1行ずつ入れること。遅く、 を使います。
  • COPY の認証にを使うこと。 ロールを関連付けて IAM_ROLE で指定します。
  • 主キーを宣言すれば重複が防げると考えること。 は一意性を強制しません。
  • すれば からすぐ読めると考えること。カタログへの登録が別に必要です。
  • ストリーミング取り込みで、1つのストリームに用途ごとのビューをいくつも作ること。と費用が増えます。

参考文献

  1. ※1出題比率: AWS 公式の試験ガイドに記載された、採点対象の設問のうちその分野が占める割合です。

検索

キーワードを入力してください