概要
- DuckDB の開発者によるParquetフォーマット進化の障壁に関する議論
- Parquet Version 2の仕様とエコシステム全体への影響
- バージョン2のパフォーマンス検証結果
- エコシステムでの互換性問題と導入判断の難しさ
- 進化の課題と将来展望
Parquetフォーマット進化の障壁
- DuckDB 開発者による記事「Query Engines: Gatekeepers of the Parquet File Format」での指摘
- ParquetファイルをSQLテーブルとして扱う Query Engine が最新仕様へ未対応
- エコシステム全体の進化が停滞する要因
- この問題は Query Engine だけでなく、周辺ツール全体に波及
- Carpetリリース直後、ParquetフォーマットVersion 2の存在に気付く
- Java ParquetライブラリはVersion 2をデフォルトで有効化しない仕様
- 仕様が確定済みでも、エコシステム全体で実装状況が不十分
- Pandas(Python)でVersion 2ファイルの読み込み不可問題を経験
- 互換性のため即座にロールバック対応
Parquet Version 2の仕様と実装状況
- 仕様は確定済みだが、実装・対応状況はエコシステムでバラバラ
- どこまで対応すれば「Version 2互換」と言えるか未合意
- Pull Requestやメーリングリストで4年以上議論が継続
- 仕様内で独立して進化できる2つの概念
- 列データの エンコーディング方式 (RLE_DICTIONARY、DELTA_BYTE_ARRAY等)
- エンコード済みデータの ファイル内配置構造 (Data Page V2)
- エンコーディング改善は列単位の非互換、ページ構造変更はファイル全体の非互換に直結
- 新しい論理型(例:VARIANT)は特定バージョンに依存せず追加可能
- 例:DATEはint64、Big DecimalやStringはBYTE_ARRAYで表現
- 機械学習分野ではParquetやORCの限界も顕在化
- FacebookのNimble、LanceDBのLV2など新フォーマットの登場
- ただし、これらはニッチ用途と位置付け、Parquetがデータエンジニアリング分野で主流継続予想
Parquet Version 2のパフォーマンス検証
-
ファイル書き込み時にバージョン指定はプロパティ設定のみで簡単
- 例:CarpetWriterでWriterVersion.PARQUET_2_0を指定
-
イタリア政府データセット・New Yorkタクシーデータセットを用いた比較
-
ファイルサイズ比較
| フォーマット | Version 1 | Version 2 | 改善率 | |---|---|---|---| | CSV | 1761MB | 1761MB | - | | UNCOMPRESSED | 564MB | 355MB | 37% | | SNAPPY | 220MB | 198MB | 10% | | GZIP | 146MB | 138MB | 5% | | ZSTD | 148MB | 144MB | 2% | | LZ4_RAW | 209MB | 192MB | 8% | | LZO | 215MB | 195MB | 9% |
- Version 2の新エンコーディングにより、圧縮前で大きな効果
- 追加圧縮の効果は相対的に小さくなる傾向
-
書き込み速度比較
| フォーマット | Version 1 | Version 2 | 改善率 | |---|---|---|---| | UNCOMPRESSED | 25.0s | 23.6s | 6% | | SNAPPY | 25.2s | 23.5s | 7% | | GZIP | 39.3s | 35.8s | 9% | | ZSTD | 27.3s | 25.7s | 6% | | LZ4_RAW | 24.9s | 23.8s | 4% | | LZO | 26.0s | 24.6s | 5% |
- 特に数値型が多いデータセットで書き込み速度が大幅改善
- GZIP圧縮時の改善が顕著
-
読み込み速度比較
| フォーマット | Version 1 | Version 2 | 改善率 | |---|---|---|---| | UNCOMPRESSED | 11.4s | 11.3s | 1% | | SNAPPY | 12.5s | 11.5s | 8% | | GZIP | 13.6s | 12.8s | 6% | | ZSTD | 13.1s | 12.2s | 7% | | LZ4_RAW | 12.8s | 11.3s | 12% | | LZO | 13.1s | 12.1s | 7% |
- 読み込み速度も全体的に改善
- 特に10進数型が多いデータセットで効果大
-
互換性問題と導入判断
- Parquetの進化を批判する意図ではなく、 オープンフォーマット進化の難しさ を記録
- Parquetの利便性・恩恵は小さな不便を大きく上回る
- 最新仕様によるファイルサイズ・処理速度の改善はあるが、劇的ではない
- エコシステムでVersion 2の採用が進んでいない現状
- サードパーティ連携時の互換性問題を考慮し、導入の判断が必要
- 全工程を自前で管理できる場合は、 最新仕様採用も選択肢
進化の課題と将来展望
- オープンフォーマット進化には 合意形成の難しさ、 実装状況の不均一性 という構造的課題
- エコシステム全体での 対応状況の見極め が重要
- 新しい用途や分野での限界が見えてきた場合、 新フォーマットの検討 も必要
- しかし、Parquetは今後もデータエンジニアリング分野で 中心的役割 を果たす見通し