Amazon Athena で Apache Iceberg テーブルを使用する際、エラーが発生します。
解決策
発生しているエラーに応じてトラブルシューティング手順を実行します。
テーブルプロパティキーがサポートされていない
このエラーは、CREATE TABLE ステートメントまたは ALTER TABLE ステートメントの TBLPROPERTIES 句が、サポートされているテーブルプロパティを使用していない場合に発生します。Iceberg テーブルを作成または変更する際に、Athena はテーブルプロパティで事前定義されたキーと値のペアのリストのみを許可します。
このエラーを解決するには、Iceberg テーブルはサポートされているテーブルプロパティを使用する必要があります。
テーブルにサポートされていないプロパティがあり、Athena が CREATE TABLE ステートメントを生成できない
クエリで DDL ステートメント SHOW CREATE TABLE を実行したことが原因で、Athena がテーブル構造を再現できない場合、"UNSUPPORTED" エラーが発生します。代わりに、DESCRIBE FORMATTED DDL ステートメントを使用するとテーブルのプロパティが表示されます。
「TABLE_REDIRECTION_ERROR」エラーが発生する
このエラーは、Athena の SELECT クエリにおいて、サポートされていない Iceberg テーブルのメタデータを使用した場合に発生します。Athena の SELECT クエリに、サポートされている Query Iceberg テーブルメタデータが含まれていることを確認してください。
「Unsupported Hive type」というエラーが発生する
このエラーは、サポートされていないデータ型を Iceberg テーブルで使用した場合に発生します。たとえば、Iceberg テーブルは tinyint または smallint の Athena データ型をサポートしていないことが原因で、「SHORT, use integer」というエラーが発生する場合があります。同様に、Iceberg テーブルは Athena のデータ型である char をサポートしていないことが原因で、「CHAR, use string」エラーが発生する場合があります。
この問題を解決するには、Athena のクエリが Iceberg テーブルでサポートされているデータ型を使用していることを確認してください。
「ICEBERG_COMMIT_ERROR」エラーが発生する
このエラーは、複数のステートメントが Iceberg テーブル更新で並行して実行される同じファイルセットを変更しようとした場合に発生する可能性があります。たとえば、複数の DELETE ステートメントが並行して同じレコードセットを同時に削除しようとした場合が当てはまります。
この問題を解決するには、次の手順を実行します。
- 並列データ処理を避けるために、クエリの更新は順番に実行する必要があります。
- Iceberg テーブルを更新するときに、エクスポネンシャルバックオフによる再試行メカニズムを実装します。
注: Athena は AWS Glue の楽観的ロックのみをサポートしています。Iceberg テーブルを他のロック方法で変更すると、データが失われ、トランザクションが中断する可能性があります。詳細については、Apache Iceberg のウェブサイトで「楽観的ロック」を参照してください。
「NOT_SUPPORTED: Iceberg table updates require at least format version 2」というエラーが発生する
このエラーは、Iceberg バージョン 1 テーブルで DELETE 操作の実行を試みた場合に発生します。Athena はバージョン 2 の Iceberg テーブルのみを作成、操作します。Iceberg テーブルが Athena エンジンバージョン 2 を使用していることを確認してください。別のタイプのエンジンを使用する場合は、テーブルプロパティ format-version を 2 に設定し、行レベルの削除を許可してください。たとえば、Iceberg テーブルを作成して AWS Glue データカタログに登録する場合は、バージョン 2 を使用します。詳細については、Apache Iceberg のウェブサイトで「フォーマットの削除」を参照してください。
「GENERIC_INTERNAL_ERROR:」エラーが発生する
次のエラーメッセージが表示されます。
「GENERIC_INTERNAL_ERROR: com.amazonaws.trino.exceptions.UnrecoverableS3OperationException: com.amazonaws.services.s3.model.AmazonS3Exception: The specified key does not exist (指定したキーは存在しません)」
このエラーは、マニフェストリストや metadata.json などのメタデータファイルを削除する際に発生します。その場合、Athena クエリは失敗します。ファイルを正常に回復できない場合は、テーブルをスナップショットまたはタイムスタンプにロールバックします。
注: Athena クエリエディターではなく、AWS Glue や Amazon EMR などの Apache Spark 環境でテーブルをロールバックする必要があります。
テーブルを特定のスナップショット ID にロールバックするには、Apache Iceberg コマンド roll_to_snapshot を実行します。
CALL catalog_name.system.rollback_to_snapshot('your-db.your-table', your-snapshot-id)
注: your-db、your-table、your-snapshot-id は、実際の値に置き換えてください。
テーブルを特定のタイムスタンプにロールバックするには、Apache Iceberg コマンド rollback_to_timestamp を実行します。
CALL catalog_name.system.rollback_to_timestamp('your-db.your-table', TIMESTAMP 'yyyy-mm-dd hh:mm:ss')
注: your-db、your-table、yyyy-MM-dd HH:mm:ss は、実際の値に置き換えてください。
詳細については、Apache Iceberg のウェブサイトで rollback_to_snapshot および rollback_to_timestamp を参照してください。
関連情報
Athena での問題のトラブルシューティング
Apache Iceberg を Spark のクロスアカウント AWS Glue データカタログで使用する方法を教えてください
Apache Iceberg テーブルをクエリする