BigQuery へのデータ取込でよく使われるファイル形式(NDJSON, Parquet)と取込方式(Storage Write API)の特徴、メリット、デメリットをまとめました。
1. 概要
- NDJSON (Newline Delimited JSON): 1行が1つのJSONオブジェクトになっているテキスト形式。扱いやすさと柔軟性が特徴。
- Parquet: 列(カラム)指向のバイナリフォーマット。高い圧縮率と高速な読み込み性能が特徴。
- Storage Write API: データをBigQueryへ高ストループットかつ低遅延で書き込むためのGRPCベースのAPI(ファイル形式ではなく取込API)。
2. 比較一覧表
| 名称 | 分類 | 特徴 | メリット | デメリット |
|---|---|---|---|---|
| NDJSON | ファイル形式 | 1行ごとに独立したJSONオブジェクトを配置したテキストフォーマット | ・人間が直接読んで内容を理解しやすい ・スキーマ(構造)の変更に柔軟に対応できる ・可変長データやネスト構造を簡単に表現できる | ・ファイルサイズが大きくなりやすい(圧縮率が低い) ・バイナリ形式に比べてParse処理(ロード時)に時間がかかる ・型定義が曖昧になりやすい |
| Parquet | ファイル形式 | カラム(列)単位でデータを保持するバイナリフォーマット | ・高圧縮率のためストレージ容量・転送コストを抑えられる ・列指向のためBigQuery側でのロード処理が非常に高速 ・スキーマ(メタデータ)と型定義がファイル自体に埋め込まれている | ・テキストエディタ等で直接中身を確認できない ・生成・変換時にCPUリソースを消費する ・構造が複雑すぎると生成処理のロジックが難しくなる |
| Storage Write API | 取込API | gRPCベースのデータストリーミングおよびバッチ書き込み用API | ・従来の Streaming Insert API より低コスト(約50%オフ)かつ低遅延 ・トランザクション(Exactly-once: 厳密に1回だけ書き込む)の保証 ・スキーマ更新への柔軟な対応 | ・gRPCやProtocol Buffersを使用するため実装・開発の難易度が少し高い ・単なるファイル設置ではなく、アプリケーション側のプログラム実装が必要 |
3. 選定の目安(ユースケース)
- Parquet を使うべきとき: > * バッチ処理で大量データをCloud Storage経由でロードする場合(最もロードコスト・速度のパフォーマンスが良い)。
- NDJSON を使うべきとき: > * ログデータやAPIのレスポンスなど、ネスト構造が深く、スキーマが頻繁に変わる可能性のあるデータを手動または簡易バッチで取り込む場合。
- Storage Write API を使うべきとき: > * アプリケーションからリアルタイム(または数秒程度の低遅延)で直接BigQueryへデータを流し込みたい場合。