DEA / ドメイン1 データの取り込みと変換

重要な内容

変更データキャプチャ (CDC) と zero-ETL

(CDC) は、データベースで起きた挿入・更新・削除を、起きた順に取り出して別の場所へ伝える仕組みです。毎回テーブル全体をコピーする代わりに変更分だけを運ぶため、分析側のデータを新しく保ちつつ、ソースのデータベースへの負荷を抑えられます。 統合は、この CDC のパイプラインを AWS が丸ごと管理する仕組みです。

Point
  • CDC = Change Data Capture (変更データキャプチャ) の略です。
  • zero-ETL は「ETL のパイプラインを自分で作らなくてよい」という意味で、変換が一切ないという意味ではありません。
  • upsert は update と insert を合わせた言葉で、「あれば更新、なければ挿入」です。
  • 和訳

概要

概要の図 DynamoDB Streams Kinesis Data Streamsfor DynamoDB DMS の CDC zero-ETL 統合 DynamoDB Lambda Kinesis Data Streams RDS・Aurora・オンプレミス DB S3・Kinesis・Redshift Aurora・RDS・DynamoDB Amazon Redshift Firehose・Flink MERGE・Iceberg で適用
方式ソース運ぶ先決め手
StreamsDynamoDB など項目の変更をすぐに Lambda で処理
for DynamoDBDynamoDBKinesis Data Streams長い保持、多数のコンシューマー、 や との連携
の 、、や 上の DB など、Kinesis、、他の DB多様なソース、変換や移行と組み合わせる
統合Aurora、RDS、DynamoDB、一部の などAmazon Redshift などパイプラインを作らず、運用最小でほぼリアルタイム

主要技術

①DynamoDB Streams と Kinesis Data Streams for DynamoDB ⚠️ 頻出

観点 Streams for DynamoDB
保持期間24 時間最大 1 年 (Kinesis の保持期間)
同時に読めるコンシューマーあたり2つまでシャードあたり5つ、 で20まで
順序項目ごとに変更の順序どおりレコードのタイムスタンプで実際の順序を判断する
重複重複レコードは出ないまれに重複することがある
処理の方法、DynamoDB Streams Kinesis AdapterLambda、、、 ストリーミング
料金読み取りの料金 (Lambda のトリガーは読み取り料金なし)Kinesis Data Streams の料金

DynamoDB Streams のストリームレコードに含める内容 (ビューの種類) は、KEYS_ONLY (キーだけ)、NEW_IMAGE (変更後)、OLD_IMAGE (変更前)、NEW_AND_OLD_IMAGES (両方) から選びます。差分の計算や監査が目的なら NEW_AND_OLD_IMAGES です。

同じテーブルで両方を同時に有効にできます。

⚠️ 頻出: 「DynamoDB の変更を、Lambda で1件ずつすぐに処理」は DynamoDB Streams、「変更を多数の処理系で読む、24 時間を超えて保持、Firehose で へ」は Kinesis Data Streams for DynamoDB です。


②AWS DMS による CDC

は、ソースのデータベースのトランザクションログ (MySQL のバイナリログ、PostgreSQL の WAL、Oracle の REDO ログなど) を読んで変更を取り出します。テーブルへ問い合わせて差分を探すのではないため、ソースへの負荷が小さく、削除も取り出せます。

タスクの種類内容
全ロード既存のデータを一度に全部移す
全ロード + 全部移した後、進行中の変更を続けて反映する (最もよく使う)
CDC のみ変更だけを流す (初期データは別の方法で用意済み)

ターゲットを にすると、変更は や CSV のファイルとして書き出され、各行に操作の種類 (I/U/D) の列が付きます。ターゲットを にすると、変更をストリームとして他の処理系へ配れます。DMS の詳細は「AWS DMS」の章で扱います。


③zero-ETL 統合 ⚠️ 頻出

統合は、ソースから への複製を AWS が自動で作成・管理する仕組みです。最初に全データをロードし、その後は変更をほぼリアルタイムに反映します。

対応するソース (Redshift への統合)補足
MySQL、Aurora PostgreSQL運用 DB の分析の代表例
for MySQL、RDS for PostgreSQL、RDS for Oracle—
テーブルの複製。DynamoDB の読み取り容量を消費しない (エクスポートの仕組みを使う)
アプリケーション (Salesforce、SAP、ServiceNow、Zendesk など) の zero-ETL 統合
セルフマネージドの MySQL、PostgreSQL、 Server、Oracle—
機能内容
複製先Redshift のプロビジョンドクラスター、Redshift Serverless
履歴モード変更前の行も残し、いつどう変わったかを追える ( タイプ2 のような履歴)
監視Redshift のシステムビュー、 の統合イベント
複製後の加工Redshift のや SQL で変換 ()

zero-ETL では、ソースとターゲットの間で複雑な変換はできません。変換が必要なら、Redshift に入った後で SQL で行うか、 や Glue でパイプラインを作ります。

⚠️ 頻出: 「Aurora の取引データを Redshift でほぼリアルタイムに分析したい。 パイプラインの構築と運用を最小にしたい」は zero-ETL 統合です。DMS や Glue のジョブを自分で組む選択肢は、運用負荷の点で劣ります。


④CDC を適用する (MERGE と upsert)

取り出した変更を分析側のテーブルへ反映するには、挿入・更新・削除を正しく適用します。

適用先方法
変更をステージングテーブルへ し、 (または DELETE + INSERT) で本体へ反映
上の テーブル ()、、 の MERGE INTO で行単位に upsert・削除
主キーで PutItem (上書き) し、削除は DeleteItem
④CDC を適用する (MERGE と upsert)の図 変更ファイルI/U/D 付き ステージングテーブル 同じキーの最新の変更だけ残す MERGEU→更新 I→挿入 D→削除 本体テーブル

同じ行に複数の変更が届いた場合は、タイムスタンプやシーケンス番号で最新の変更だけを残してから適用します。適用処理は、同じ変更を2回適用しても結果が変わらない () ように作ります。

従来の Hive 形式のテーブル (S3 上の ファイルの集まり) は行単位の更新・削除ができず、ファイルを丸ごと書き直す必要があります。 を S3 のに頻繁に反映するなら、Apache Iceberg などのを使います。


⑤複数のソースからデータを統合する

やバッチで集めたデータを1か所で結合すると、顧客 360 度のような横断的な分析ができます。

方法内容向くケース
ジョブで結合複数のソース (、、) を読み、結合して S3 や へ書く定期的なバッチの統合、複雑な変換
Redshift へ集約 や で複数のソースを Redshift に集め、 で結合SQL で分析する、
・S3 や / のデータを動かさずに Redshift から結合データの移動を減らしたい
のフェデレーテッドクエリコネクタで DynamoDB や RDS などを S3 のデータと結合アドホックな横断分析

統合では、キーの名前や型、コード値 (例: 国コード) をそろえ、重複を除く処理が必要です。


試験対策

①判断マトリクス

問題文のキーワード選ぶ方式
の変更で を起動DynamoDB Streams
DynamoDB の変更を 24 時間超保持、多数のコンシューマー for DynamoDB
変更前と変更後の値を両方NEW_AND_OLD_IMAGES
の DB の変更を継続的に AWS へ (全ロード + )
//DynamoDB を で分析、パイプライン不要 統合
Redshift で変更の履歴も残したいzero-ETL の履歴モード
変更を Redshift のテーブルへ反映ステージングテーブル +
変更を のに行単位で反映 + MERGE INTO
複数のソースを結合して分析用データを作る ジョブ、または Redshift に集めて

②よくある誤答

  • 毎回テーブル全体をエクスポートして差分を探すこと。ソースの負荷が大きく、削除も検出しにくいため、 を使います。
  • Streams に 24 時間を超える保持を期待すること。
  • で複雑な変換まで済ませられると考えること。変換は に入った後の で行います。
  • だけのに CDC の更新・削除をそのまま反映しようとすること。 などのテーブル形式を使います。

参考文献

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

検索

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