ETL

データを抽出 (Extract)、変換 (Transform)、ロード (Load) するデータパイプライン

データベースCI/CD

ETL とは

ETL は、データソースからデータを抽出 (Extract)、ビジネスロジックに合わせて変換 (Transform)、データウェアハウスにロード (Load) するデータパイプラインである。

ETL の 3 ステップ

[Extract]           [Transform]          [Load]
DynamoDB     →    集計・フィルタ    →    Redshift
S3 (CSV)     →    型変換・結合     →    S3 (Parquet)
RDS          →    クレンジング     →    OpenSearch
外部 API     →    正規化          →    DynamoDB

ETL vs ELT

観点 ETL ELT
変換の場所 パイプライン内 ロード先の DWH
適用 構造化データ 大量の生データ
ツール Glue, Lambda Redshift, Athena
柔軟性 変換ロジックを事前定義 ロード後に自由に変換

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

パターン 構成
小規模 S3 → Lambda → DynamoDB
中規模 S3 → Step Functions → Lambda → S3
大規模 S3 → Glue ETL → Redshift

ETL の品質管理

ETL パイプラインでは、入力と出力のレコード数が一致するか、必須カラムに NULL が含まれていないか、数値カラムに文字列が混入していないか、主キーに重複がないかを検証する。これらのチェックを自動化し、異常を検知したらパイプラインを停止してアラートを発報する。

体系的に学ぶなら関連書籍を参照してほしい。

関連用語