はじめに
こんにちは、半田です。
前回に引き続き、AWS 規範ガイダンス「Using Apache Iceberg on AWS」を読んでメモをしていきたいと思います。
前回は「Working with Apache Iceberg tables by using Amazon Data Firehose」のページを読みました。
今回は「Working with Apache Iceberg tables by using Amazon Athena SQL」を読んでいきます。
前の記事の冒頭にも書きましたが、こういうメモをあまり書いたことがないので、「それまんま引用じゃね?」というところがあってもご容赦ください。
あと自分の理解を書いていますが、もしかしたら間違っている可能性もあるので、正しい情報は公式の各ドキュメントを参照するようにしてください。
目次
- はじめに
- 目次
- Working with Apache Iceberg tables by using Amazon Athena SQL(Amazon Athena SQLを使ってApache Icebergテーブルを操作する)
- 次回
- 終わりに
Working with Apache Iceberg tables by using Amazon Athena SQL(Amazon Athena SQLを使ってApache Icebergテーブルを操作する)
#2
ではAmazon AthenaでApache Icebergテーブルを利用する方法を見ていきました。
このページでは、Amazon AthenaでIcebergテーブルを使うためのサポートされる機能の概要についてみていきます。
バージョンと機能の互換性
Iceberg テーブル仕様のサポート
Apache Icebergテーブルの動作については、Iceberg Table Specで規定されています。
AthenaはIceberg Table SpecのVersion 2をサポートしており、Iceberg Table Specで記載されているデフォルトバージョンも2になります。
IcebergのFormat Versionについては以下ドキュメントに記載があり、現在提供されているバージョンは1、2、3で、Version 4については開発中のようです。
自分も少し戸惑いましたが、Apache Icebergにはソフトウェアとしてのリリースバージョン(1.9.1等)とIcebergテーブル形式の仕様バージョンの2種類があり、前者はバグ修正や新機能の実装等が行われたときにインクリメントされ、後者は前方互換性が失われるタイミングでインクリメントされるようになっているみたいです。
後方互換性はサポートされているため、ソフトウェアとしての最新バージョンを使用しつつ、テーブル仕様はV1/V2を利用するということも可能になります。
話を戻すと、Athenaではこのテーブル仕様バージョンのV2がサポートされている、ということになります。
また、参考までにGlue Data CatalogやGlue Iceberg REST EndpointでもサポートされているのはV1またはV2のみとなります。
ただ、Glueはカスタムライブラリ機能を利用することができるため、手動で最新バージョンを利用することで提供されているV3の機能を利用することも可能かと思われます。
Iceberg v1 および v2 テーブルは、このページに記載されている手順に従って、Lake Formation コンソールまたは AWS コマンドラインインターフェースを使用して作成できます。また、AWS Glue コンソールまたは AWS Glue クローラーを使用して Iceberg テーブルを作成することもできます。詳細については、AWS Glue 開発者ガイドの「Data Catalog と Crawlers」セクションを参照してください。 Creating Apache Iceberg tables - AWS Lake Formation
エンドポイントは、Apache Iceberg テーブル仕様の v1 と v2 の両方をサポートし、デフォルトでは v2 が使用されます。Iceberg テーブルの v1 仕様を使用する場合、API 呼び出しで v1 を明示的に指定する必要があります。API 操作を使用すると、Amazon S3 オブジェクト ストレージと Amazon S3 テーブル ストレージの両方に格納された Iceberg テーブルにアクセスできます。 Connecting to the Data Catalog using AWS Glue Iceberg REST endpoint - AWS Glue
Amazon EMR上のApache SparkやAWS GlueなどのAthena以外のエンジンで作成されたIcebergテーブルを利用する際は、テーブルプロパティを利用してTable Format Versionを設定する必要があります。 iceberg.apache.org
アイスバーグ機能のサポート
AthenaがIcebergテーブルにUPDATE/MERGE INTO/DELETE FROMを使用してデータを変更する場合、AthenaはMerge-On-Readモードのみをサポートします。
Copy-On-Writeモードでデータを更新・削除したい場合はAmazon EMRやAWS Glue等を利用する必要があります。
Copy-On-WriteモードとMerge-On-Readモードについて公式ドキュメントで詳しく説明されている箇所は見つけられなかったので、わかりやすく説明されている以下記事を見ていただければと思います。
dev.classmethod.jp
ざっくり理解だと、データの更新や削除が入った場合にデータを含むファイルごと再作成するのがCopy-On-Write(CoW)モード、更新や削除が行われたデータに対してのみ新しいファイルを作成するのがMerge-On-Read(MoR)モードのようです。
CoWはファイルごと再作成されるため読み取り効率は良いが書き込み時のパフォーマンスが低い、MoRは変更が発生したデータのみファイルを作成するため書き込み効率は良いがマージが必要になるので読み込み時のパフォーマンスが低い、と理解しました。
Iceberg テーブル仕様のV1はCoWのみ、V2はCoWとMoRをサポートしています。
ドキュメントの注意書きにもありますが、AthenaはMoRしかサポートしていないため、テーブルプロパティで設定しても強制的にMoRになります。
Athena では、CoW がサポートされていないため、更新、削除、およびマージ操作は、テーブルプロパティ内のコピーオンライト (CoW) 設定に関係なく、常にデフォルトのマージオンリード (MoR) になります。 Working with Apache Iceberg tables by using Amazon Athena SQL - AWS Prescriptive Guidance
アイスバーグ・テーブルを使う
詳細な使い方については以下記事で確認したこのページを参照するように記載されているので省略します。
Athenaは以下の制限があるので、これらの制限を気にせず利用したい場合はAthena以外のサービスでIcebergテーブルの作成やデータの追加を検討すると良いです。
- テーブルDDL作成
- S3オブジェクトの接頭辞
- インクリメンタルクエリ
インクリメンタルクエリについては以下ドキュメントをご確認ください。 iceberg.apache.org
次回
今回は「Working with Apache Iceberg tables by using Amazon Athena SQL」について確認しました。
次のページを見ていきながら、可能なら実際に使い方も試してみたいと思います。
- Migrating existing tables to Apache Iceberg
終わりに
今回は実際に手を動かして検証するような内容はありませんでしたが、Iceberg バージョンやCoW/MoR等の仕組みについて知ることができたので、かなり学びになりました。
特にバージョン周りは違いがよくわかってなかったので、それぞれのバージョンが何を意味しているのかを理解できて良かったです。