【要約】pandas + SQLiteで差分ファイルだけを処理するETLを作る [Zenn_Python] | Summary by TechDistill
> Source: Zenn_Python
Execute Primary Source
// Problem
開発者は、既存のETL処理をPythonへ移行する際、非効率な全件処理という課題に直面した。毎回すべてのファイルを読み込む手法は、リソースの浪費を招く。
- ・全件読み込みによる計算リソースの浪費
- ・処理時間の増大
- ・更新されたファイルのみを特定するロジックの欠如
// Approach
開発者は、pandasのデータ操作能力とSQLiteの永続性を組み合わせ、差分抽出ロジックを構築した。
- ・pathlibでファイルの最終更新日時を取得
- ・SQLiteから履歴をDataFrameとして一括取得
- ・mergeを用いて入力ファイルと履歴を結合
- ・欠損値と時刻比較により、新規・更新を判定
- ・UPSERTを用いて処理成功後に履歴を更新
// Result
この実装により、開発者は処理対象を「新規」「更新」「変更なし」の3状態に明確に分類できた。
- ・不要なファイル処理のスキップによる効率化
- ・SQL実行回数の削減によるパフォーマンス向上
- ・業務ルールを反映した可読性の高いコードの実現
Senior Engineer Insight
> 実戦投入には、検知精度の検討が不可欠だ。本手法はファイル名とmtimeに依存するため、内容のみの変更を見逃すリスクがある。厳密な整合性が求められる現場では、SHA-256等のハッシュ値併用を推奨する。また、ファイル数が膨大になる場合は、メモリ消費量に注意が必要だ。設計段階で、精度とコストのトレードオフを判断せよ。