Apache Hudi データセットをクエリする
Apache HudiUpsert
は、レコードがまだ存在しない場合は既存のデータセットに挿入し、存在する場合はレコードを更新する機能のことです。
Hudi は、分析のパフォーマンス問題を引き起こす可能性のある小さなファイルを多数作成することなく、データの挿入と更新イベントを処理します。Apache Hudi は自動的に変更を追跡し、ファイルをマージして、最適なサイズを維持します。これにより、多数の小さなファイルをモニタリングし、より少ない数の大きなファイルに書き換えるカスタムソリューションを構築する必要がなくなります。
Hudi データセットは、次のユースケースに適しています。
-
一般データ保護規則
(GDPR) やカリフォルニア州消費者プライバシー法 (CCPA) など、個人情報を削除したり、個人データの使用方法を変更したりする権利を実施するプライバシー規制を遵守する。 -
特定のデータの挿入および更新イベントを必要とするセンサーやその他のモノのインターネット (IoT) デバイスからのストリーミングデータを操作する。
Hudi によって管理されるデータセットは、オープンストレージ形式を使用して Amazon S3 に保存されます。現在、Athena は短縮された Hudi データセットを読み取ることができますが、Hudi データを書き込むことはできません。Athena は、Athena エンジンバージョン 2 で Hudi バージョン 0.8.0 まで、Athena エンジンバージョン 3 では Hudi バージョン 0.14.0 までをサポートします。これは変更される可能性があります。Athena は、Hudi のそれ以降のバージョンで作成されたテーブルとの読み取り互換性は保証できません。Athena エンジンのバージョニングについては、「Athena エンジンのバージョニング」を参照してください。Hudi の機能とバージョニングの詳細については、Apache ウェブサイトの「Hudi ドキュメント
Hudi データセットは、次のタイプのいずれかになります。
-
書き込み時コピー (CoW) – データは列形式 (Parquet) で保存され、更新ごとに書き込み中にファイルの新しいバージョンが作成されます。
-
読み取り時マージ (MoR) – データは、列形式 (Parquet) 形式と行形式 (Avro) の組み合わせを使用して保存されます。更新は、行形式の
delta
ファイルに記録され、必要に応じて圧縮されて、新しいバージョンの列形式のファイルが作成されます。
CoW データセットでは、レコードが更新されるたびに、そのレコードを含むファイルが更新された値で書き換えられます。MoR データセットでは、更新があるたびに、Hudi によって変更されたレコードの行のみが書き込まれます。MoR は、読み取りが少なく書き込みまたは変更が多いワークロードに適しています。CoW は、頻繁に変更されないデータの読み取りが多いワークロードに適しています。
Hudi にはデータにアクセスするためのクエリタイプが 3 種類用意されています。
-
スナップショットクエリ – 指定されたコミットまたは圧縮アクションの時点で最新のテーブルスナップショットを参照するクエリです。MoR テーブルの場合、スナップショットクエリは、クエリ時に最新のファイルスライスのベースファイルとデルタファイルをマージして、テーブルの最新の状態を提示します。
-
増分クエリ – クエリは、指定されたコミット/圧縮以降にテーブルに書き込まれた新しいデータのみを参照します。これにより、増分データパイプラインを有効にするための変更ストリームが効果的に提供されます。
-
読み取り最適化クエリ – MoR テーブルの場合、クエリは圧縮された最新のデータを参照します。CoW テーブルの場合、クエリはコミットされた最新のデータを参照します。
次の表は、各テーブルタイプに対して実行できる Hudi クエリタイプを示しています。
テーブルタイプ | 使用可能な Hudi クエリタイプ |
---|---|
書き込み時にコピー | スナップショット、増分 |
読み取り時にマージ | スナップショット、増分、読み取り最適化 |
現在、Athena はスナップショットクエリと読み取り最適化クエリをサポートしていますが、増分クエリはサポートしていません。MoR テーブルでは、すべての 読み取り最適化クエリに対して提示されるデータは圧縮されています。これにより、パフォーマンスは向上しますが、最新のデルタコミットは含まれていません。Snapshot クエリには、最も新しいデータが含まれています。しかし、いくつかの計算オーバーヘッドが生じ、これらのクエリのパフォーマンスが低下します。
テーブルとクエリタイプ間でのトレードオフの詳細については、Apache Hudi ドキュメントの「テーブルとクエリのタイプ
Hudi 用語の変更: ビューはクエリに変更されました
Apache Hudi リリースバージョン 0.5.1 以降、以前はビューと呼ばれていたものがクエリと呼ばれるようになりました。次の表は、新旧用語の変更をまとめたものです。
旧用語 | 新用語 |
---|---|
CoW: 読み取り最適化ビュー MoR: リアルタイムビュー |
スナップショットクエリ |
増分ビュー | 増分クエリ |
MoR 読み取り最適化ビュー | 読み取り最適化クエリ |