Tech

【BigQuery】データ取込 NDJSON / Parquet / Storage Write API

公開

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取込APIgRPCベースのデータストリーミングおよびバッチ書き込み用API・従来の Streaming Insert API より低コスト(約50%オフ)かつ低遅延

・トランザクション(Exactly-once: 厳密に1回だけ書き込む)の保証

・スキーマ更新への柔軟な対応
・gRPCやProtocol Buffersを使用するため実装・開発の難易度が少し高い

・単なるファイル設置ではなく、アプリケーション側のプログラム実装が必要

3. 選定の目安(ユースケース)

  • Parquet を使うべきとき: > * バッチ処理で大量データをCloud Storage経由でロードする場合(最もロードコスト・速度のパフォーマンスが良い)。
  • NDJSON を使うべきとき: > * ログデータやAPIのレスポンスなど、ネスト構造が深く、スキーマが頻繁に変わる可能性のあるデータを手動または簡易バッチで取り込む場合。
  • Storage Write API を使うべきとき: > * アプリケーションからリアルタイム(または数秒程度の低遅延)で直接BigQueryへデータを流し込みたい場合。