4
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【10分解説】Parquet形式とは?:大量データの分析を効率化するファイル形式の特徴を理解する

Last updated at Posted at 2026-01-04

はじめに

今回は、データ分析の文脈で出てくる「Parquet」形式についてまとめてみました。

一般的にデータ格納形式として使われるCSVファイルと比較しながら、Parquetが持つ特徴を整理します。

image.png

目次

Parquet形式とは何か

Parquet(パーケ、パルケ)形式は、大量のデータを高速に分析するために作られた列指向(カラムナ)ファイル形式です。
特に、ログ分析や売上集計などの「大量のデータをあとからまとめて集計・分析する用途(OLAP)」において広く使われています。

背景

近年の分析基盤では、データをデータベース(RDB)の中ではなく、ストレージ上に「ファイル」として保存する運用される場合が多くあります。

データレイク / データレイクハウス と呼ばれる構成では、

  • データはオブジェクトストレージなどに「ファイル」として保存され
  • クエリエンジン(Apache Spark / Trino / DuckDBなど)が
  • それらのファイルを 直接読み取って分析 します

このような構成では、
どんなファイル形式でデータを保存するか」 が、システムの性能とコスト(転送量)に直結します。
Parquetは、この 「ファイルとして保存された大量データを、いかに高速に分析するか」 に特化して設計されています。

Parquet形式は Apache Parquet として標準的に定義・提供されています。

「Apache」とは何か

Apache Parquet の「Apache」は、Apache Software Foundation(ASF) という非営利団体が管理している公式オープンソースプロジェクトであることを表してます。

■ Apache Software Foundation

  • 世界的に有名なオープンソース財団
  • 特定の会社に依存せず、中立的にソフトウェアを管理している

Apache Parquet のほかにも、Apache HadoopApache Spark など、多くのデータ基盤技術が Apache プロジェクトとして提供されています。
なお、「Apache」というとWebサーバソフトウェアである「Apache HTTP Server」を思い浮かべる方も多いですが、これも本来はオープンソースプロジェクトの一つという位置づけです。

行指向(CSV)と 列指向(Parquet)の違い

最大の差は、ディスク上での「データの並び順」にあります。
Parquet形式では、データを 列単位(列指向 / カラムナ) で保存します。

行指向(Row-based)

id,name,price
1,apple,100
2,banana,120
3,orange,150
  • 1行分のデータがまとまって保存される
  • 1件ずつ処理する OLTP(トランザクション処理) には向いている
  • でも「price列だけ集計したい」場合でも全列を読む必要がある

列指向(Parquet)

id:     1, 2, 3
name:   apple, banana, orange
price:  100, 120, 150
  • 列ごとにデータがまとまって保存される
  • 分析クエリ(集計・フィルタ)で 必要な列だけ読める
  • I/O が劇的に減る

なぜ Parquet は分析が速いのか

Parquetが速い理由は、単に「列指向だから」だけではありません。「読み込む量を最小限にする仕組み」と「コンピュータが理解しやすいデータ形式」の組み合わせに秘密があります。

① 必要な列だけ読む(列プルーニング)

分析で、例えば「100列あるうちの、売上の1列だけ使いたい」というケースの場合:

  • *CSVの場合: 特定の列だけ欲しくても、全列(id, name, price など)を端から順に読み飛ばす必要があります。
  • Parquetの場合: price 列が必要なら、そのデータが格納されている場所へダイレクトにアクセスします。

👉 ディスクI/O(データの読み取り量)が劇的に減り、処理が高速化します。これを列プルーニング(Column Pruning) と呼びます。

② 統計情報を持っている(ファイル単位のメタデータ)

Parquetファイルの末尾(フッター)には、統計情報(メタデータ) が記録されています。

  • 各列の 最小値(min)/ 最大値(max)
  • nullの有無
  • データ数など

例えば WHERE price > 1000 という条件で検索した場合、
クエリエンジンはまずファイルのメタデータを確認します。「このファイルの最大値は500だ」と分かれば、ファイルの中身を1ミリも読まずにスキップします。

👉 条件に合わないファイルは 最初から読み飛ばすため、実際にスキャンする対象が大幅に削減されます。
これを述語プッシュダウン(Predicate Pushdown) と呼びます。

③ 圧縮効率が高い

同じ列には「同じデータ型」や「似た値」が並びます。

例:都道府県 列なら「東京都東京都東京都……」と並ぶ。
例:ステータス 列なら「0, 0, 1, 0, 0……」と並ぶ。

このように規則性があるデータは、「辞書圧縮」(同じ値を短いコードに置き換える)などの手法が非常に効果的です。

👉 CSVに比べてファイルサイズが劇的に小さくなります。ストレージ代が安くなるだけでなく、「データが小さい=読み込みが速い」 という相乗効果を生みます。

④ CPU効率の最大化(バイナリ形式とスキーマ保持)

CSVとの決定的な違いは、Parquetが「型情報を持ったバイナリ形式」であることです。

  • パース(解析)が不要: コンピュータがCSVを読む際、すべてのデータを一度「文字列」として認識し、そこから「123」を数値の 123 に、「2024-01-01」を 日付型 に変換する処理が発生します。このデシリアライズ(復元処理) に大きなCPUサイクルが消費されます。Parquetは最初からコンピュータが理解できる「0と1」のバイナリなので、そのままメモリに載せて処理できます。

  • 型定義(スキーマ)が最初から決まっている: ファイルヘッダーに「1列目はInt64型(長整数型)」といった厳格な**スキーマ(定義書)**を持っています。読み込み側は推論を行う必要がなく、常にデータの正確性が保証されます。

👉 CPUの計算リソースを無駄遣いせず、テラバイト級のデータでもスムーズに処理できます。

Parquet単体では「テーブル」ではない

Parquetはあくまで ファイル形式 であり、

  • どのファイルがテーブルに含まれるか
  • どれが最新版なのか
  • 更新・削除・履歴管理

といった テーブル管理の責務は持っていません。

そのため実運用では、

  • Parquetファイル形式
  • Iceberg / Delta Lake / Hudiテーブルフォーマット

を セットで使う のが前提になります。

まとめ

  • Parquet は、分析に特化した「列指向」のファイル形式
  • 列プルーニング統計情報(メタデータ) により、スキャン量を最小化できる。
  • 高い圧縮率バイナリ形式により、コストとCPU負荷を同時に削減できる。。
  • Iceberg などと組み合わせることで、クラウド上での強力な分析基盤になる。
4
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?