Avro vs Parquet: 行指向か列指向のストレージか?
Avroは書き込みとstreamingに最適化された行指向フォーマット、Parquetは分析的な読み取りと圧縮に最適化された列指向フォーマットです。
Avroはレコードを行単位で保存し、streamingの取り込み、レコード全体の書き込み、schemaの進化に効率的です。Parquetはデータを列単位で保存し、強力な圧縮と選択した列の高速scanを可能にします。これはanalyticsやdata lakeのqueryに最適です。両者はデータエコシステムにおいて補完的で、Avroは取り込みとstreaming、Parquetは分析的ストレージに用います。
| Avro | Parquet | |
|---|---|---|
| レイアウト | 行指向 | 列指向 |
| 最適化対象 | 書き込み、streaming | 分析的な読み取り |
| 圧縮 | 良好 | 優秀(列ごと) |
| schemaの進化 | 強力 | サポート |
| 最適な用途 | 取り込み、Kafka | data 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を使います。
関連ガイド
Protobuf vs Avro: Which Binary Schema Format?Protocol Buffers vs Apache Avro: codegen-based binary serialization vs schema-with-data formats for streaming…
Protobuf vs JSON: Binary or Human-Readable?Protocol Buffers vs JSON: compact, schema-driven binary serialization vs ubiquitous human-readable text. Size…
Kafka vs Pulsar: Which Streaming Platform?Apache Kafka vs Apache Pulsar: the dominant event log vs a multi-tenant streaming platform with tiered storag…