ETL
データを抽出 (Extract)、変換 (Transform)、ロード (Load) するデータパイプライン
データベースCI/CD
ETL とは
ETL は、データソースからデータを抽出 (Extract)、ビジネスロジックに合わせて変換 (Transform)、データウェアハウスにロード (Load) するデータパイプラインである。
ETL の 3 ステップ
ETL の 3 ステップを図で示す。
[Extract] [Transform] [Load]
DynamoDB → 集計・フィルタ → Redshift
S3 (CSV) → 型変換・結合 → S3 (Parquet)
RDS → クレンジング → OpenSearch
外部 API → 正規化 → DynamoDB
ETL vs ELT
ETL と ELT の違いを以下にまとめる。
| 観点 | ETL | ELT |
|---|---|---|
| 変換の場所 | パイプライン内 | ロード先の DWH |
| 適用 | 構造化データ | 大量の生データ |
| ツール | Glue, Lambda | Redshift, Athena |
| 柔軟性 | 変換ロジックを事前定義 | ロード後に自由に変換 |
AWS Glue
AWS Glue のコード例を示す。
# Glue ETL ジョブ (PySpark)
from awsglue.context import GlueContext
glueContext = GlueContext(SparkContext.getOrCreate())
# Extract: S3 から CSV を読み込み
source = glueContext.create_dynamic_frame.from_catalog(
database="mydb", table_name="raw_orders"
)
# Transform: 不要なカラムを削除、型を変換
transformed = source.drop_fields(["temp_col"]).resolveChoice(
specs=[("price", "cast:double")]
)
# Load: S3 に Parquet で書き出し
glueContext.write_dynamic_frame.from_options(
transformed, connection_type="s3",
connection_options={"path": "s3://bucket/processed/"},
format="parquet"
)
サーバーレス ETL
サーバーレス ETL を以下にまとめる。
| パターン | 構成 |
|---|---|
| 小規模 | S3 → Lambda → DynamoDB |
| 中規模 | S3 → Step Functions → Lambda → S3 |
| 大規模 | S3 → Glue ETL → Redshift |
ETL の品質管理
ETL パイプラインでは、入力と出力のレコード数が一致するか、必須カラムに NULL が含まれていないか、数値カラムに文字列が混入していないか、主キーに重複がないかを検証する。これらのチェックを自動化し、異常を検知したらパイプラインを停止してアラートを発報する。
体系的に学ぶなら関連書籍を参照してほしい。
この記事は役に立ちましたか?
関連用語
データレイク
構造化・非構造化データを生の形式で大量に保存し、後から分析・加工するストレージ基盤
Redshift
AWS のペタバイト規模のデータウェアハウスサービスで、大量データの分析クエリを高速に実行する
Change Data Capture
データベースの変更をリアルタイムに検出し、下流システムに伝播させるデータ統合パターン
AST
ソースコードの構文構造をツリー形式で表現したデータ構造
データウェアハウス
分析用に最適化された大規模データストアで、複数のデータソースを統合して意思決定を支援する
AWS Glue
AWS のサーバーレス ETL サービスで、データの抽出・変換・ロードとデータカタログ管理を提供する