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ファイルの場合:

  1. ストリーム処理 — ファイル全体をメモリにロードしない
  2. ハッシュベースの比較 — 各行をハッシュ化し、まずハッシュを比較
  3. サマリー出力 — 詳細の前に変更数を表示
  4. サンプリング — 最初のN件の変更を表示し「他にX件...」

ユースケース

CSV Diffは、期間間のレポート出力を比較するデータアナリスト、データ移行結果を検証するQAチーム、ETLパイプライン出力をデバッグする開発者、在庫・価格・顧客データの変更を検出するためにスプレッドシートエクスポートを比較するビジネスユーザーにとって不可欠です。

試してみる — Diff Viewer

フルツールを開く