Apache Iceberg テーブルをクエリする - Amazon Athena

Apache Iceberg テーブルをクエリする

Athena を利用して、Apache Iceberg テーブルに対して読み取り、タイムトラベル、書き込み、DDL クエリを実行できます。Iceberg テーブルでは、データには Apache Parquet 形式を使用し、メタストアには AWS Glue カタログを使用する必要があります。

Apache Iceberg は、非常に大規模な分析データセット用のオープンテーブル形式です。Iceberg は、大量のファイルのコレクションをテーブルとして管理し、レコードレベルの挿入、更新、削除、タイムトラベルクエリなどの最新の分析データレイクオペレーションをサポートします。Iceberg の仕様では、スキーマやパーティションの進化などのテーブル進化をシームレスに行うことが可能であり、Amazon S3 での使用に最適化して設計されています。Iceberg は、同時書き込みシナリオでのデータの正確性の保証にも役立ちます。

Apache Iceberg の詳細については、https://iceberg.apache.org/ を参照してください。

考慮事項と制限事項

Iceberg テーブルに対する Athena のサポートには、次の考慮事項と制限があります。

  • Iceberg バージョンのサポート – Athena は Apache Iceberg バージョン 1.4.2 をサポートします。

  • AWS Glue カタログのテーブルのみオープンソースの Glue カタログの実装で定義されている仕様に基づく AWS Glue カタログに対して作成された Iceberg テーブルのみが Athena でサポートされています。

  • AWS Glue によるテーブルロックのサポートのみ – オープンソースの Glue カタログ実装はプラグインのカスタムロックをサポートしますが、Athena は AWS Glue オプティミスティックロックのみをサポートします。Athena を使用して他のロックが実装されている Iceberg テーブルを変更すると、データが失われ、トランザクションが中断する可能性があります。

  • サポートされているファイル形式 - 次の表に示すように、Athena での Iceberg ファイル形式のサポートは、Athena エンジンのバージョンによって異なります。

    Athena エンジンバージョン Parquet ORC Avro
    2 はい いいえ なし
    3 あり はい 可能
  • Iceberg v2 テーブル – Athena は、Iceberg v2 テーブルを作成し、操作します。v1 テーブルと v2 テーブルの違いについては、Apache Iceberg ドキュメントの「形式バージョンの変更」を参照してください。

  • タイムゾーンのない時刻型の表示 – タイムゾーンのない時刻型とタイムスタンプ型は UTC で表示されます。時刻の列のフィルター式でタイムゾーンが指定されていない場合は、UTC が使用されます。

  • タイムスタンプ関連のデータの精度 – Iceberg はタイムスタンプデータ型について、マイクロ秒精度をサポートしていますが、Athena は読み込みと書き込みの両方でタイムスタンプに対してミリ秒の精度しかサポートしていません。手動圧縮オペレーション中に書き換えられるデータについて、Athena は、時間関連の列でミリ秒の精度しか保持しません。

  • サポートされていないオペレーション - Iceberg テーブルに対して次の Athena オペレーションはサポートされていません。

  • ビュー - ビューを使用する で説明されているように Athena ビューを作成する場合に CREATE VIEW を使用します。Iceberg ビュー仕様を使用してビューを作成することに興味がある場合は、athena-feedback@amazon.com までご連絡ください。

  • AWS Lake Formation でサポートされていない TTF 管理コマンド — Lake Formation を使用して Apache Iceberg、Apache Hudi、Linux Foundation Delta Lake などのトランザクションテーブル形式 (TTF) の読み取りアクセス権限を管理できますが、Lake Formation を使用して VACUUMMERGEUPDATEOPTIMIZE など、これらのテーブル形式を使用する操作の権限を管理することはできません。Lake Formation と Athena の統合の詳細については、「AWS Lake Formation 開発者ガイド」の「Amazon Athena での AWS Lake Formation の使用」を参照してください。

  • ネストされたフィールドによるパーティション分割 — ネストされたフィールドによるパーティション分割はサポートされていません。これを実行しようとすると、「 NOT_SUPPORTED: Partitioning by nested field is unsupported: column_name.nested_field_name」(未サポート: ネストされたフィールドによるパーティション分割はサポートされていません: column_name.nested_field_name) というメッセージが表示されます。

  • S3 Glacier オブジェクトのスキップはサポートされていません — Apache Iceberg テーブル内のオブジェクトが Amazon S3 Glacier ストレージクラスにある場合、read_restored_glacier_objects テーブルプロパティを false に設定しても効果はありません。

    例えば、次のコマンドを実行したとします。

    ALTER TABLE table_name SET TBLPROPERTIES ('read_restored_glacier_objects' = 'false')

    Iceberg および Delta Lake テーブルでは、コマンドは「サポートされていないテーブルプロパティキー: read_restored_glacier_objects」というエラーを生成します。Hudi テーブルでは、ALTER TABLE コマンドはエラーを発生しませんが、Amazon S3 Glacier オブジェクトはまだスキップされません。ALTER TABLE コマンドの後に SELECT クエリを実行すると、引き続きすべてのオブジェクトが返されます。

Athena でサポートしてほしい機能につきましては、athena-feedback@amazon.com までご意見をお寄せください。