🐳

Parquet形式とは

2024/02/04に公開

今回はデータ形式のParquetについて解説します。

Parquet形式とは

Parquet形式は、大規模なデータファイルに使用されるフォーマットの一つであり、以下の構成要素を持ちます。

  • ファイルヘッダー
    ファイルがParquet形式であることを示す
  • メタデータ
    データセットのスキーマ情報(カラム名、データ型など)、各列のデータ詳細(圧縮タイプ、エンコーディングなど)を示す。これによりデータへのアクセス方法が分かる
  • データブロック(行グループ)
    データ本体。列方向に複数の行グループに分割されて保存されている。例えば1000行のデータであれば、5つの200行を内包する行グループに分けることができる。各行グループに対してメタデータが存在する

データブロックの確認

具体的にデータ形式をイメージするために、データ本体の構造について見ていきましょう。

# 時間、周波数、振幅
#行グループ1
[[0.0 , 5.0, 0.],
 [0.01, 5.0, 0.30901699],
 [0.02, 5.0, 0.58778525],
 [0.03, 5.0, 0.80901699],
 [0.04, 5.0, 0.95105652]]
#行グループ2
[[0.05, 5.0, 1.0],
 [0.06, 5.0, 0.95105652],
 [0.07, 5.0, 0.80901699],
 [0.08, 5.0, 0.58778525],
 [0.09, 5.0, 0.30901699]]
#行グループ3
...

このように、テーブルデータを列方向に分割したようなデータ形式がParquet形式です。
またParquetデータへのアクセスは列方向で行われます。


・行グループ1の時間列を取得→「0.0, 0.01, 0.02, 0.03, 0.04」
・行グループ2の振幅列を取得→「1.0, 0.95105652, 0.80901699, 0.58778525, 0.30901699」

可視化

では、上記のデータの行グループ1,2から「時間」列と「振幅」列を抜き出してプロットしてみましょう。

このように、特定の列を抜き出して関係を見ることができます。

メリット

Parquet形式では、列方向のアクセスと、行グループによって大規模なデータを効率的に扱うことができます。

  1. 列方向アクセス
    Parquetは列方向でデータへのアクセスを行います。(MySQLやOracleDatabaseは行方向アクセス)

    従って、クエリ実行時に行方向に全ての列データを読み込むのではなく、クエリに必要な列だけを読み込むことで、I/Oの負荷を減らし、パフォーマンスを向上させます。
    このアクセス方式は、大規模なデータセットを扱うデータ分析などのタスクに有効です。
    例:特定の列と列[年齢と身長]の関係を知りたい時など

  2. 行グループ
    Parquetファイルは行グループによって、データが列方向に区切られています。このため大規模なデータセットでは、行グループごとに分散して分析を行うことができます。また特定のグループのみを抜き出すこともできるため、より効率的にデータを扱うことができます。

まとめ

Parquet形式は、行グループを持つ列方向のデータ形式であり、効率的なデータ操作を可能にします。データが大規模になるほど、そのメリットは大きくなるでしょう。

今回はここまでになります。最後まで読んでいただきありがとうございました。

Discussion