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 が含まれていないか、数値カラムに文字列が混入していないか、主キーに重複がないかを検証する。これらのチェックを自動化し、異常を検知したらパイプラインを停止してアラートを発報する。
体系的に学ぶなら関連書籍を参照してほしい。