Apache Parquet ファイルは、分析クエリのカラム型データベースに使用されるオープンソースのデータ・ストレージ形式です。データセットは小さいものの、検索する行が数百万行ある場合は、性能を高めるためにカラム形式を使用する方がよいかもしれません。カラム型データベースは、行ごとにグループ化する標準的な行ベースのデータベースではなく、列をグループ化することでデータを保存します。Parquet ファイルは、複数のカラム型ストレージ形式の 1 つです。
Parquet ファイルとは?
Excel スプレッドシートや標準的なリレーショナル・データベースのように行をグループ化する代わりに、Apache Parquet ファイルは列をグループ化し、性能を向上させます。Parquet は、データベース自体ではなくカラム型のストレージ形式ですが、Parquet 形式はデータレイク、特に Hadoop で一般的です。カラム形式であるため、分析データ・ストレージやクエリでよく使用されます。
ほとんどの開発者は、行ベースのデータ・ストレージに慣れていますが、Excel スプレッドシートを回転させて、列が番号付きの行の代わりに表示されるようになることを想像してみてください。例えば、Parquet ファイルは、姓と名を 1 行にまとめた姓と名列のリストで顧客テーブルを保持する代わりに、列をまとめて格納し、データベースが多数の列で各行を検索するのではなく、特定の列からの情報をより迅速に返すことができるようにします。
Parquet ファイルのメリット
Parquet のファイルによるデータの保存方法に基づくクエリ性能とは別に、もう 1 つの主な利点はコスト効率です。Apache Parquet ファイルは、圧縮と解凍が効率的であるため、標準的なデータベース・ファイルほどのスペースを消費しません。ストレージ・スペースを削減することで、エンタープライズの組織は、ストレージ・コストを数千ドル削減できます。
カラム型ストレージの形式は、ビッグデータや分析クエリに最適です。Parquet ファイルは、画像、動画、オブジェクト、ファイル、標準データを保存できるため、あらゆるタイプの分析アプリケーションに使用できます。Parquet のファイル戦略はオープンソースであるため、データ・ストレージやクエリ戦略をカスタマイズしたい組織にも最適です。
Parquet ファイルの仕組み
Parquet ファイルには、列ベースのストレージが含まれていますが、メタデータも含まれます。列は、クエリの効率を高めるために各行グループでグループ化され、メタデータは、データベース・エンジンがデータを見つけるのに役立ちます。メタデータには、列、データを含む行グループ、スキーマに関する情報が含まれます。
Parquet ファイルのスキーマは、ストレージに対する列ベースのアプローチを示しています。スキーマ形式はバイナリ形式であり、Hadoop データレイク環境で使用できます。Parquet ファイルは任意のファイル・システムに保存できるため、Hadoop 環境に限定されません。
Parquet ファイル・ストレージ形式の利点の 1 つは、述語プッシュダウンと呼ばれる戦略です。述語プッシュダウンにより、データベース・エンジンは、処理の早い段階でデータをフィルタリングし、よりターゲットを絞ったデータをパイプラインに転送します。クエリの対象となるデータを減らすことで、クエリの性能が向上します。また、データ処理が減ることで、コンピュータ・リソースの使用量が削減され、最終的にはコストも削減されます。
Parquet ファイルの使用
Parquet ファイルは Apache ファイルであるため、複数のライブラリをインポートすれば、独自の Python スクリプトで作成できます。Python にテーブルがあるとします。
import numpy as np
import pandas as pd
import pyarrow as pa
df = pd.DataFrame({'one': [-1, 4, 1.3],
'two': ['blue', 'green', 'white'],
'three': [False, False, True]},
index=list('abc'))
table = pa.Table.from_pandas(df)
このテーブルでは、Parquet ファイルを作成できるようになりました。
import pyarrow.parquet as pq
pq.write_table(table, 'mytable.parquet')
上記のコードは、ファイル「mytable.parquet」を作成し、テーブルを書き込みます。お気に入りのデータベースから読み取ってデータをインポートしたり、独自のクエリや分析にデータを使用したりできます。
また、Python を使用してファイルからこのテーブルを読むこともできます。
pq.read_table('mytable.parquet', columns=['one', 'three'])
write() 関数を使用すると、ファイルにテーブルを書き込むときにオプションを設定できます。Apache のサイトにはオプションのリストがありますが、ファイルの Apache Spark への互換性の設定例を以下に示します。
import numpy as np
import pandas as pd
import pyarrow as pa
df = pd.DataFrame({'one': [-1, 4, 1.3],
'two': ['blue', 'green', 'white'],
'three': [False, False, True]},
flavor=’spark’)
table = pa.Table.from_pandas(df)
まとめ
Parquet ファイルを Hadoop、Apache Spark、その他の互換性のあるデータベースに使用する場合は、Python を使用してファイル作成を自動化するか、分析のためにデータベース環境にファイルをインポートすることができます。Parquet ファイルは圧縮によりストレージ容量の要件を低減しますが、大規模なビッグデータ・サイロには過剰なストレージ容量が必要です。ピュア・ストレージの重複排除/圧縮技術は、ビッグデータ・ストレージを支援します。