ビッグデータ用ファイル形式は、ストレージ効率、スキーマの進化、クエリ速度の間でトレードオフを取ります。 最適な選択は、ワークロードの中心がレコードの走査なのか、多数の行から少数の列を読むことなのか、 システム間でイベントを交換することなのかによって異なります。
行指向形式 #
行指向形式は、1 つのレコードのフィールドをまとめて配置します。Avro は代表的な例です。 完全なレコードを効率よく読み取れるため、ストリーミング、イベント交換、書き込み主体のワークロードに適しています。 Avro は書き込み側のスキーマをデータとともに保存し、互換性のある進化を支える明示的なスキーマ解決規則を備えています。
列指向形式 #
Parquet と ORC はデータを列単位で整理します。分析エンジンはクエリが必要とする列だけを読み、 類似した値に圧縮とエンコーディングを適用し、ファイルまたは行グループの統計情報を使ってデータをスキップできます。 この性質により、大規模な分析テーブルの既定形式として適しています。
パーティション分割はディレクトリレベルのレイアウト規約であり、Parquet 固有の性質ではありません。 テーブルは日付のようなカーディナリティの低い、または中程度のフィールドで分割でき、各パーティションには Parquet ファイルを格納します。 小さすぎるパーティションやファイルを過剰に作成しないでください。メタデータとスケジューリングのオーバーヘッドが利点を上回る可能性があります。
実際の選択 #
データレイク分析には Parquet などの列指向形式を使用します。パイプラインに行指向でスキーマを進化させられる メッセージ形式またはレコード形式が適する場合は Avro を使用します。特定の Hive 指向ワークロードでエコシステムとの統合や機能が有利なら ORC を選択します。 形式にかかわらず、スキーマ、ファイルサイズ、圧縮、パーティション分割をテーブル設計の一部として管理します。
コメント
GitHub で閲覧・コメントする(投稿にはログインが必要です)