CSVデータファイルの比較と行レベルの変更検出
2つのCSVファイルを比較して、追加・削除・変更された行を検出します。キー列による行マッチング、列の並べ替えの処理、スプレッドシートエクスポートのデータ変更の特定手法を学びます。
Data Diff
詳細な説明
CSVデータのDiff
CSVファイルの比較にはデータの表形式構造の理解が必要です。プレーンテキストDiffは各行を独立して扱いますが、よりスマートなCSV Diffはキー列で行をマッチングし、列の並べ替えを検出し、変更を意味のある方法で提示できます。
テキストDiffとCSV対応Diffの比較
# 元のデータ
id,name,email,age
1,Alice,alice@example.com,30
2,Bob,bob@example.com,25
# 変更後
id,name,email,age
2,Bob,bob@example.com,26
1,Alice,alice@corp.com,30
3,Charlie,charlie@example.com,28
テキストDiffは行の順序が変わったため、すべての行が変更されたと表示します。id列で行をマッチングするCSV対応Diffは以下を表示します:
行 id=1: email変更: "alice@example.com" → "alice@corp.com"
行 id=2: age変更: 25 → 26
行 id=3: 追加 (Charlie, charlie@example.com, 28)
マッチング戦略
| 戦略 | 仕組み | 最適な用途 |
|---|---|---|
| キー列で | ユニークIDで行をマッチング | データベースエクスポート |
| 行インデックスで | 同じ位置で行ごとに比較 | 順序付きデータ |
| コンテンツハッシュで | 同一/類似の行を検出 | 重複排除 |
列レベルの変更
CSV Diffは構造的変更も検出すべきです:
- 列の追加 — 変更後のファイルに新しい列
- 列の削除 — 変更後のファイルに列が欠落
- 列名の変更 — ヘッダー名が変更
- 列の並べ替え — 同じ列が異なる順序
データ型の処理
CSVはすべてを文字列として格納するため、型を考慮した比較を検討してください:
"30" vs "30.0" — 同じ数値?
"2024-01-15" vs "01/15/2024" — 同じ日付?
" Alice " vs "Alice" — トリム後に同じ?
大規模ファイルのパフォーマンス
数百万行のCSVファイルの場合:
- ストリーム処理 — ファイル全体をメモリにロードしない
- ハッシュベースの比較 — 各行をハッシュ化し、まずハッシュを比較
- サマリー出力 — 詳細の前に変更数を表示
- サンプリング — 最初のN件の変更を表示し「他にX件...」
ユースケース
CSV Diffは、期間間のレポート出力を比較するデータアナリスト、データ移行結果を検証するQAチーム、ETLパイプライン出力をデバッグする開発者、在庫・価格・顧客データの変更を検出するためにスプレッドシートエクスポートを比較するビジネスユーザーにとって不可欠です。