Skip to content
Latchkey

Avro vs Parquet: 行指向か列指向のストレージか?

Avroは書き込みとstreamingに最適化された行指向フォーマット、Parquetは分析的な読み取りと圧縮に最適化された列指向フォーマットです。

Avroはレコードを行単位で保存し、streamingの取り込み、レコード全体の書き込み、schemaの進化に効率的です。Parquetはデータを列単位で保存し、強力な圧縮と選択した列の高速scanを可能にします。これはanalyticsやdata lakeのqueryに最適です。両者はデータエコシステムにおいて補完的で、Avroは取り込みとstreaming、Parquetは分析的ストレージに用います。

AvroParquet
レイアウト行指向列指向
最適化対象書き込み、streaming分析的な読み取り
圧縮良好優秀(列ごと)
schemaの進化強力サポート
最適な用途取り込み、Kafkadata lake、query

ユースケースとアクセスパターン

レコード全体を頻繁に書き込みまたはstreamingし、容易なschema進化が必要な場合はAvroを選びます。Kafkaトピックやlanding zoneなどです。大規模データセットから少数の列を読む分析的queryを実行する場合はParquetを選びます。列指向レイアウトと圧縮がI/Oを劇的に削減します。多くのpipelineはAvroとして取り込み、その後analytics向けにParquetへ変換します。

CIとデータジョブでは

schemaを検証し、サンプルデータで変換/ETLのテストを実行します。どちらもmanaged runner上のデータpipelineで動作し、より高速なrunnerは変換と検証のジョブを短縮します。

結論

schemaの進化を伴うstreamingの取り込みと頻繁なレコード全体の書き込み: Avro。大規模データセットに対して列をscanする分析的query: Parquet。標準的なlakehouseパターンは取り込みにAvro、分析的ストレージ層にParquetを使います。

関連ガイド