CSV由来のJSONをSQL INSERT文に変換する

CSVファイルから変換されたJSONデータをSQL INSERT文に変換する方法を学びます。ヘッダーベースのカラムマッピング、型変換、空文字列の処理、大規模ファイルのチャンキングを解説します。

Real-World Scenarios

詳細な説明

CSV由来のJSONからSQLへ

CSV変換で生成されたJSONデータには独特の特徴があります:すべての値が文字列である可能性があり、ヘッダーがキーになり、空セルが空文字列またはnullになります。正確なSQL変換には特別な処理が必要です。

JSONの例(CSV由来)

[
  { "id": "1", "name": "Alice", "age": "30", "salary": "75000.50", "active": "true", "notes": "" },
  { "id": "2", "name": "Bob", "age": "25", "salary": "62000.00", "active": "false", "notes": "new hire" }
]

数値やブール値を含め、すべての値が文字列であることに注意してください。これはCSV由来の特徴的な兆候です。

型変換

コンバーターは値を検出し、適切なSQL型にキャストすべきです:

INSERT INTO employees (id, name, age, salary, active, notes) VALUES
  (1, 'Alice', 30, 75000.50, TRUE, NULL),
  (2, 'Bob', 25, 62000.00, FALSE, 'new hire');

型検出ルール

文字列パターン 推論される型
"123"(全桁数字) INTEGER
"123.45"(ドット付き数字) DECIMAL / FLOAT
"true" / "false" BOOLEAN
""(空文字列) NULL
"2024-06-15"(日付パターン) DATE
その他すべて VARCHAR / TEXT

空文字列の処理

CSVエクスポートでは欠落データを空文字列で表すことが多いです。コンバーターはオプションを提供すべきです:

  • NULLに変換(ほとんどのデータベースで推奨)
  • 空文字列のまま保持(空が意味を持つVARCHARカラム用)

ヘッダーの正規化

CSVヘッダーにはスペース、特殊文字、大文字小文字の混在が含まれることが多いです:

CSVヘッダー 正規化されたカラム名
"Full Name" full_name
"E-mail Address" email_address
"#ID" id
"Total ($)" total_usd

大規模ファイルのチャンキング

CSVファイルは非常に大きくなる可能性があります。コンバーターはJSON配列をチャンクに分割します:

-- チャンク1(行1-1000)
INSERT INTO employees (...) VALUES (...), (...), ...;

-- チャンク2(行1001-2000)
INSERT INTO employees (...) VALUES (...), (...), ...;

パイプライン:CSV -> JSON -> SQL

この2段階変換は、JSONがCSVよりもプログラム的に操作しやすいため一般的です。jq、Pythonのjsonモジュール、またはDevToolboxのCSV-to-JSONコンバーターが最初のステップを処理します。JSON-to-SQLコンバーターが2番目のステップを処理します。

ユースケース

ビジネスツール(Excel、Google Sheets、レガシーシステム)からCSVとしてエクスポートされたデータを受け取る際、JSONを経由してSQLに変換することでデータベースインポートの信頼性の高いパイプラインが提供されます。これはソースシステムがCSVエクスポートのみをサポートするデータ移行プロジェクトで一般的です。

試してみる — JSON to SQL

フルツールを開く