データ形式の選び方
「とりあえず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 / データ整合性の確認