Parquet
Parquet とは
Apache Parquet は、効率的なデータの保存と検索のために設計された、オープンソースの列指向データファイル形式です。複雑なデータを一括処理するための効率的なデータ圧縮と符号化方式を提供し、パフォーマンスを向上させます。Apache Parquet は、バッチとインタラクティブの両方のワークロードで共通の交換形式となるように設計されており、Hadoop で利用可能な他の列指向ストレージファイル形式である RCFile や ORC に似ています。
Parquet の特徴
- コスト不要のオープンソースのファイル形式
- あらゆる言語に対応
- 列ベースのフォーマット:ファイルは行ではなく列ごとに整理されるため、ストレージ容量を節約し、分析クエリを高速化します。
- 分析(OLAP)のユースケースに使用:通常は、従来の OLTP データベースと組み合わせて使用します。
- 高効率なデータ圧縮と解凍
- 複雑なデータタイプ、高度にネストされたデータ構造をサポート
Parquet を使用するメリット
- ビッグデータの保存に最適:構造化データ、テーブル、画像、動画、ドキュメントなど、あらゆる種類のデータを保存できます。
- クラウドストレージを節約:高効率な カラム単位の圧縮と、異なるデータの種類の列に対応する柔軟な符号化方式を採用しています。
- データのスループットとパフォーマンスの向上:データスキッピングなどの技術を用いて、特定の列の値を取得するクエリによるデータの行全体の読み取りを不要にします。
Apache Parquet は、レコードのシュレッダーとアセンブリアルゴリズムによって実装され、データの保存に使用できる複雑なデータ構造に対応しています。また、複雑なデータを一括処理するために最適化されており、効率的なデータ圧縮とエンコーディングタイプを備えているのが特徴です。特に、大きなテーブルから特定の列を読み込むクエリに最適です。Parquet は、必要な列のみを読み込むことで IO を大幅に削減できます。
列指向フォーマットでデータを保存するメリット
- CSV のような行指向ファイルと比較すると、Apache Parquet のような列指向ストレージは効率的:クエリを実行する際、列指向ストレージでは、非関連データを迅速にスキップすることができるため、行指向データベースと比較して、集計クエリの時間が短縮されます。また、このようなストレージ方式により、ハードウェアの節約およびデータアクセスのレイテンシを最小限に抑えることが可能です。
- Apache Parquet は、ゼロから構築:このため、高度にネストされたデータ構造への対応が可能です。Parquet のデータファイルのレイアウトは、個々のフ ァイルに対してギガバイト級のデータを大規模処理するクエリのために最適化されています。
- Parquet のデータファイルのレイアウトは、個々のファイルに対してギガバイト級のデータを大規模処理するクエリのために最適化:Parquet は、柔軟な圧縮オプションと効率的なエンコードスキームをサポートするように構築されています。それぞれの列のデータタイプは類似しているため、各列の圧縮は簡単で、クエリの実行はさらに高速化します。
- 優れたサーバーレスな技術との親和性:Apache Parquet は、AWS Athena や Amazon Redshift Spectrum、Google BigQuery、Google Dataproc などの対話型でサーバーレスな技術との親和性に優れています。
Parquet と CSV の比較
CSV は、Excel や Google スプレッドシートなどの多くのツールで使用されており、他にも多数のツールで使用されているシンプルで一般的なフォーマットです。CSV はデータパイプラインのデフォルト設定ですが、次のようなデメリットがあります。
- Amazon Athena や Spectrum では、クエリごとにスキャンしたデータ量で課金される。
- Google や Amazon では、GS または S3 に保存したデータ量により課金される。
- Google Dataproc では、実行時間に応じて課金される
Parquet により、大規模なデータセットのストレージ必要量は少なくとも 3 分の 1 削減され、スキャンとデシリアライゼーションに必要な時間の大幅な改善で、全体のコストが削減されています。 以下の表は、データを CSV から Parquet へ変換することで得られる速度と節約率を比較したものです。
データ セット |
Amazon S3 でのデータサイズ |
クエリの実行時間 |
スキャンデータ |
コスト |
CSV ファイルのデータ |
1 TB |
236 秒 |
1.15 TB |
US$5.75 |
Apache Parquet 形式のデータ |
130 GB |
6.78 秒 |
2.51 GB |
US$0.01 |
削減率 |
Parquet 使用による削減率 87% |
34 倍速 |
スキャンデータ削減率 99% |
削減率 99.7% |
Parquet と Delta Lake
オープンソースの Delta Lake プロジェクトは、Parquet 形式に基づいて構築され、さまざまな機能の追加により拡張されています。追加機能には、クラウドオブジェクトストレージの ACID トランザクション、タイムトラベル、スキーマの拡張、シンプルな DML コマンド(CREATE、UPDATE、INSERT、DELETE、MERGE)などがあります。Delta Lake は、順序付けられたトランザクションログを使用してこれらの重要な機能の多くを実装しています。これにより、クラウドのオブジェクトストレージ上におけるデータウェアハウス機能が可能になります。詳細は、こちらの動画 Delta Lake 詳細編:トランザクションログをご覧ください。