

# Apache Iceberg テーブルをクエリする
<a name="querying-iceberg"></a>

Athena を利用して、Apache Iceberg テーブルに対して読み取り、タイムトラベル、書き込み、DDL クエリを実行できます。

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

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

## 考慮事項と制限事項
<a name="querying-iceberg-considerations-and-limitations"></a>

Iceberg テーブルに対する Athena のサポートには、次の考慮事項と制限があります。
+ **Iceberg バージョンのサポート** – Athena は Apache Iceberg バージョン 1.4.2 をサポートします。
+ **Lake Formation に登録されたテーブル** – Athena は現在、Lake Formation に登録された Iceberg テーブルでの DDL 操作をサポートしていません。
+ **情報スキーマに対するクエリ** – Iceberg テーブルの情報スキーマをクエリする場合、Athena は列メタデータの信頼できるソースとして S3 メタデータを使用します。つまり、列情報はカタログメタデータからではなく、基盤となる S3 ファイルから取得されます。この動作は、カタログメタデータが列情報の主要なソースである可能性がある他のテーブル形式とは異なります。
+ **AWS Glue カタログのテーブルのみ** – [オープンソースの Glue カタログの実装](https://iceberg.apache.org/docs/latest/aws/#glue-catalog)で定義されている仕様に基づく AWS Glue カタログに対して作成された Iceberg テーブルのみが Athena でサポートされています。
+ **AWS Glue によるテーブルロックのサポートのみ** – オープンソースの Glue カタログ実装はプラグインのカスタムロックをサポートしますが、Athena は AWS Glue オプティミスティックロックのみをサポートします。Athena を使用して他のロックが実装されている Iceberg テーブルを変更すると、データが失われ、トランザクションが中断する可能性があります。
+ **サポートされているファイル形式** – Athena エンジンバージョン 3 は、以下の Iceberg ファイル形式をサポートします。
  + Parquet
  + ORC
  + Avro
+ **Iceberg の制限付きメタデータ** – Lake Formation は Iceberg メタデータテーブルを評価しません。したがって、Iceberg メタデータテーブルは、ベーステーブルに Lake Formation の行もしくはセルフィルターが存在する場合、またはベーステーブル内のすべての列を表示するアクセス許可がない場合、制限されます。このような場合、`$partitions`、`$files`、`$manifests`、`$snapshots` Iceberg メタデータテーブルをクエリすると、失敗し、`AccessDeniedException` エラーが発生します。さらに、メタデータ列 `$path` には同じ Lake Formation の制限があり、クエリによって選択されると失敗します。Lake Formation フィルターに関係なく、他のすべてのメタデータテーブルをクエリできます。詳細については、「[メタデータテーブル](https://trino.io/docs/current/connector/iceberg.html#metadata-tables)」を参照してください。
+ **Iceberg v2 テーブル** – Athena は、Iceberg v2 テーブルを作成し、操作します。v1 テーブルと v2 テーブルの違いについては、Apache Iceberg ドキュメントの「[形式バージョンの変更](https://iceberg.apache.org/spec/#appendix-e-format-version-changes)」を参照してください。
+ **タイムゾーンのない時刻型の表示** – タイムゾーンのない時刻型とタイムスタンプ型は UTC で表示されます。時刻の列のフィルター式でタイムゾーンが指定されていない場合は、UTC が使用されます。
+ **タイムスタンプ関連のデータの精度** – Iceberg はタイムスタンプデータ型について、マイクロ秒精度をサポートしていますが、Athena は読み込みと書き込みの両方でタイムスタンプに対してミリ秒の精度しかサポートしていません。手動圧縮オペレーション中に書き換えられるデータについて、Athena は、時間関連の列でミリ秒の精度しか保持しません。
+ **サポートされていないオペレーション** - Iceberg テーブルに対して次の Athena オペレーションはサポートされていません。
  + [ALTER TABLE SET LOCATION](alter-table-set-location.md)
+ **ビュー** - [ビューを使用する](views.md) で説明されているように Athena ビューを作成する場合に `CREATE VIEW` を使用します。[Iceberg ビュー仕様](https://github.com/apache/iceberg/blob/master/format/view-spec.md)を使用してビューを作成することに興味がある場合は、[athena-feedback@amazon.com](mailto:athena-feedback@amazon.com) までご連絡ください。
+ **AWS Lake Formation でサポートされていない TTF 管理コマンド** — Lake Formation を使用して Apache Iceberg、Apache Hudi、Linux Foundation Delta Lake などのトランザクションテーブル形式 (TTF) の読み取りアクセス権限を管理できますが、Lake Formation を使用して `VACUUM`、`MERGE`、`UPDATE`、`OPTIMIZE` など、これらのテーブル形式を使用する操作の権限を管理することはできません。Lake Formation と Athena の統合の詳細については、「*AWS Lake Formation 開発者ガイド*」の「[Amazon Athena での AWS Lake Formation の使用](https://docs.aws.amazon.com/lake-formation/latest/dg/athena-lf.html)」を参照してください。
+ **ネストされたフィールドによるパーティション分割** — ネストされたフィールドによるパーティション分割はサポートされていません。{{これを実行しようとすると、「 NOT\_SUPPORTED: Partitioning by nested field is unsupported: column\_name}}.{{nested\_field\_name}}」(未サポート: ネストされたフィールドによるパーティション分割はサポートされていません: column\_name.nested\_field\_name) というメッセージが表示されます。
+ **Amazon Glacier オブジェクトのスキップはサポートされていません** – Apache Iceberg テーブル内のオブジェクトが Amazon 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 Glacier オブジェクトはまだスキップされません。`ALTER TABLE` コマンドの後に `SELECT` クエリを実行すると、引き続きすべてのオブジェクトが返されます。

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

**Topics**
+ [考慮事項と制限事項](#querying-iceberg-considerations-and-limitations)
+ [Iceberg テーブルを作成する](querying-iceberg-creating-tables.md)
+ [Iceberg テーブルデータをクエリする](querying-iceberg-table-data.md)
+ [タイムトラベルとバージョントラベルのクエリを実行する](querying-iceberg-time-travel-and-version-travel-queries.md)
+ [Iceberg テーブルデータを更新する](querying-iceberg-updating-iceberg-table-data.md)
+ [Iceberg テーブルを管理する](querying-iceberg-managing-tables.md)
+ [Iceberg テーブルスキーマを進化させる](querying-iceberg-evolving-table-schema.md)
+ [Iceberg テーブルに対して他の DDL オペレーションを実行する](querying-iceberg-additional-operations.md)
+ [Iceberg テーブルを最適化する](querying-iceberg-data-optimization.md)
+ [AWS Glue Data Catalog マテリアライズドビューをクエリする](querying-iceberg-gdc-mv.md)
+ [Athena の Iceberg テーブルでサポートされているデータ型](querying-iceberg-supported-data-types.md)
+ [追加リソース](querying-iceberg-additional-resources.md)