カラムナフォーマットParquetの構造とReadの最適化

logserializehadoop

Parquetは主にHadoopのエコシステムで使われるカラムナフォーマット。 CSVのようなrow-basedのフォーマットと比べて、必要ないデータを読まずに済むため効率的にクエリを実行することができる。

構造

データはいくつかのRow Groupに水平分割される。カラムはいくつかのColumn Chunkに切られ、圧縮やエンコーディングされる単位であるPageに分けられる。

ファイルの構造は次のようになっていて、カラムごとに1つのColumn Chunkを持ついくつかのRow Groupとそのメタデータが順に並んでいる。

File Layout

ネストしたスキーマにも対応していて、 子要素をフラットにした後、Repetiton LevelとDefinition Levelで繰り返しや階層を表している

Readの最適化

ColumnMetadataにレコード数や最小最大値、圧縮コーデックやサイズが含まれているため、Readerは必要なものだけを展開して読むことができる。 したがって取得するカラムを絞ったり、フィルタに用いるカラムをソートしておくと読むPageを減らすことができる。

参考

What is Apache Parquet? - Databricks