ゆるテックノート

データ形式の選び方

「とりあえずCSVかJSONで」になりがちですが、使いどころで向き不向きがあります。交換・保存・分析の観点で主要フォーマットをざっくり整理します。

表形式がほしいとき

行列構造で扱うなら、テキスト系か列指向バイナリかを用途で選びます。

CSV / TSV

  • 人間が読めるテキスト。CSVはカンマ区切り、TSVはタブ区切りで構造が単純。
  • RFC 4180のCSVでは、カンマ・改行・二重引用符を含むフィールドを二重引用符で囲み、内部の二重引用符を2つ重ねる。実装差があるため、ヘッダー・文字コード・改行を合意する。TSVのタブや改行の扱いも受け渡すツール間でそろえる。
  • 一時的な受け渡しやスプレッドシート連携に便利。スキーマは別途共有する必要がある。

Parquet / Arrow

  • Parquetは列指向の保存形式。型情報と圧縮・符号化を持ち、必要な列を読み出す分析に向く。速度やサイズはデータ・圧縮設定・処理内容に依存する。
  • Arrowは主に列指向のメモリ表現とデータ交換のための仕様。IPCのストリーム形式やファイル形式も持つ。ParquetとArrowは同じ役割の保存形式ではない。
  • どちらも型を表せるが、利用ツールが対応する型・版・圧縮方式を確認する。長期保存では、将来も読み出せる実装とスキーマの管理が必要。

階層や柔軟な構造がほしいとき

ネストや配列を表現したいならJSON系が扱いやすいです。

JSON / JSONL

  • キーと値で自由にネストでき、APIや設定で広く使われる。
  • JSONLはUTF-8で1行に1つのJSON値を書く形式。オブジェクトだけでなく配列やnullも書ける。空行は有効な値ではない。複数行の値は、単一のJSON文書としてではなく行ごとに読み込む。
  • JSONには文字列・数値・真偽値・null・配列・オブジェクトがあるが、日付専用の型はない。項目の必須条件や日付表現、数値の精度を別途合意し、必要ならJSON Schemaなどで検証する。

用途別のざっくり指針

読みやすさ、サイズ、速度、ツール対応のバランスで選びます。

おすすめの使い分け

  • 人が直接見る・編集する:TSV/CSV(ただしエスケープに注意)
  • APIや設定・ログ:JSON/JSONL(スキーマを別途管理)
  • 分析向けの保存:Parquet。処理中の列データ交換:Arrow。採用前に利用ツールで実データを測定する。

仕様と関連する説明

RFC 4180 / RFC 8259 / JSON Lines / Apache Parquet / Apache Arrow / データ整合性の確認