ある大手メディア企業は、Amazon S3上に数年分のユーザー行動ログデータレイクを構築しています。今後の要件として、以下の4点すべてを満たすストレージ形式・テーブル形式の採用を検討しています。 ①GDPRに基づく特定ユーザーの行レベル削除(DELETE操作) ②カラム追加などのスキーマ進化のサポート ③過去時点のデータを参照するタイムトラベルクエリ ④複数の書き込みプロセスからのACIDトランザクション 最も適切なテーブル形式はどれですか?
Apache Iceberg はS3上のデータレイクで使用できるオープンテーブル形式で、要件の4点すべてを満たします。 ①行レベルのDELETE/UPDATE操作:merge-on-readまたはcopy-on-writeで実現し、GDPR対応のレコード削除が可能です。 ②スキーマ進化:既存データを書き換えずにカラムの追加・削除・型変換が可能です。 ③タイムトラベル:スナップショット管理により `AS OF` 構文で過去時点のデータを参照できます。 ④ACIDトランザクション:楽観的同時実行制御により複数の書き込みプロセスからのACIDトランザクションをサポートします。 AWS GlueおよびAmazon AthenaはApache Icebergテーブルのネイティブサポートを提供しています。 選択肢AのApache Parquetは優れた列指向ストレージ形式ですが、単体ではACIDトランザクション、タイムトラベル、行レベル削除をサポートしていません。Hiveスタイルパーティショニングでもこれらの機能は提供されません。 選択肢CのApache AvroはAWS Glue Schema Registryと組み合わせることでスキーマ進化を管理できますが、行指向の直列化形式であり分析クエリに不向きなうえ、ACIDトランザクションやタイムトラベルもサポートしていません。 選択肢DのApache ORCはHive環境でのACIDトランザクションが知られていますが、この機能はHDFSとHiveメタストアに依存しており、Amazon S3データレイクでAthenaやGlueから使用する場合には完全なACIDトランザクションとタイムトラベルクエリをサポートしません。