ETLとは?
Definition 1 ETL
- Extract(抽出)・Transform(変換)・Load(格納) の略
- 要件として
- 自動化されていること
- 再現性があること
- データがどのように加工されか追跡しやすいこと
PythonでETL toolを作成する場面
- ETL要件がシンプルなとき
- 既存ツールでは満たせない特殊要件があるとき
ETL作業フロー
作業フロー
- 構造化されていないケースが多いファイル群からデータを抽出する
- データクレンジングを実施
- あるべきデータフォーマットに従うように型を付与する
- データをDBなどに格納する
代表的なETL tool
| 項目 | Apache Airflow | Luigi | pandas | petl | Bonobo | Bubbles |
|---|---|---|---|---|---|---|
| 種類 | ワークフローオーケストレーション | パイプラインのタスクオーケストレーション | データ分析・変換ライブラリ | 軽量ETLフレームワーク | 軽量ETLフレームワーク | メタデータ駆動型ETLフレームワーク |
| 変換機能 | Pythonオペレーター経由で間接的 | あり(カスタムタスク) | 豊富なDataFrame変換 | 基本的な行単位変換 | あり(ノードによる変換) | 限定的 |
| リアルタイム対応 | なし | なし | なし | なし | なし | なし |
| コネクタ | Python/コミュニティ製プラグイン | ファイルシステム、DB(拡張可能) | CSV, Excel, SQL, JSON など | CSV, Excel, JSON, SQL, XML | ファイル、API、DB | CSV, SQL, JSON, HTTP |
| スケジューリング | あり(リトライ・アラート対応) | あり(内部スケジューラ) | なし | なし | なし | なし |
| 並列処理 | あり(Celery, Kubernetes など) | あり | Pandas の並列オプション程度 | なし | あり(マルチスレッド) | 限定的 |
| 適している用途 | 複雑なパイプラインのオーケストレーション | 依存関係のあるタスク管理 | データクリーニング・分析・整形 | 軽量のETL作業 | 小規模ETL・パイプライン可視化 | 学術用途・プロトタイプETL |
| 制限 | 学習コスト高い、リアルタイム不可 | UIが基本的、スケールに制限 | メモリ内のみで大規模データは難しい | スケジューラ・オーケストレーションなし | エコシステム小、コミュニティ少 | メンテナンスされておらず更新ほぼなし |
| サポート | 活発なコミュニティ、商用サポートあり | コミュニティサポート | 大規模コミュニティ、豊富なエコシステム | 小規模コミュニティ | ニッチなコミュニティ | 最小限のコミュニティ、更新もほぼなし |