

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

Athena を利用して Apache Hudi テーブルを読み取る際には、次の点を考慮してください。
+ **読み取り/書き込みオペレーション** – Athena では、圧縮された Hudi データセットの読み取りはできますが、Hudi データの書き込みはできません。
+ **Hudi バージョン** – Athena は Hudi バージョン 0.14.0（デフォルト）と 0.15.0 をサポートしています。Athena は、Hudi のそれ以降のバージョンで作成されたテーブルとの読み取り互換性は保証できません。Hudi の機能とバージョニングの詳細については、Apache ウェブサイトの「[Hudi ドキュメント](https://hudi.apache.org/)」を参照してください。Athena の Hudi コネクタのバージョン 0.15.0 はブートストラップされたテーブルをサポートしていないことに注意してください。Hudi コネクタの 0.15.0 を使用するには、次のテーブルプロパティを設定します。

  ```
  ALTER TABLE table_name SET TBLPROPERTIES ('athena_enable_native_hudi_connector_implementation' = 'true')
  ```
+ **クロスアカウントクエリ** – Hudi コネクタのバージョン 0.15.0 は、クロスアカウントクエリをサポートしていません。
+ **クエリタイプ** – 現在、Athena はスナップショットクエリと読み取り最適化クエリをサポートしていますが、増分クエリはサポートしていません。MoR テーブルでは、すべての 読み取り最適化クエリに対して提示されるデータは圧縮されています。これにより、パフォーマンスは向上しますが、最新のデルタコミットは含まれていません。Snapshot クエリには、最も新しいデータが含まれています。しかし、いくつかの計算オーバーヘッドが生じ、これらのクエリのパフォーマンスが低下します。テーブルとクエリタイプ間でのトレードオフの詳細については、Apache Hudi ドキュメントの「[テーブルとクエリのタイプ](https://hudi.apache.org/docs/table_types/)」を参照してください。
+ **増分クエリ** – Athena は増分クエリをサポートしていません。
+ **CTAS** – Athena は、Hudi データで [CTAS](ctas.md) または [INSERT INTO](insert-into.md) をサポートしていません。Athena による Hudi データセットへの書き込みのサポートをご希望の場合は、athena-feedback@amazon.com までフィードバックをお送りください。

  Hudi データの記述の詳細については、次のリソースを参照してください。
  + 「[Amazon EMR リリースガイド](https://docs.aws.amazon.com/emr/latest/ReleaseGuide/)」の「[Hudi データセットの操作](https://docs.aws.amazon.com/emr/latest/ReleaseGuide/emr-hudi-work-with-dataset.html)」。
  + Apache Hudi ドキュメントの「[Writing Data](https://hudi.apache.org/docs/0.8.0/writing_data.html)」。
+ **MSCK REPAIR TABLE** – Athena での Hudi テーブルに対する MSCK REPAIR TABLE の使用はサポートされていません。AWS Glue 以外で作成された Hudi テーブルをロードする必要がある場合は、[ALTER TABLE ADD PARTITION](alter-table-add-partition.md) を使用してください。
+ **Amazon Glacier オブジェクトのスキップはサポートされていません** – Apache Hudi テーブル内のオブジェクトが Amazon Glacier ストレージクラスにある場合、`read_restored_glacier_objects` テーブルプロパティを `false` に設定しても効果はありません。

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

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

  Iceberg および Delta Lake テーブルでは、コマンドは「サポートされていないテーブルプロパティキー: read\$1restored\$1glacier\$1objects」というエラーを生成します。Hudi テーブルでは、`ALTER TABLE` コマンドはエラーを発生しませんが、Amazon Glacier オブジェクトはまだスキップされません。`ALTER TABLE` コマンドの後に `SELECT` クエリを実行すると、引き続きすべてのオブジェクトが返されます。
+ **タイムスタンプクエリ** – 現在、Hudi リアルタイムテーブルのタイムスタンプ列の読み取りを試みるクエリは、失敗するか、または空の結果を生成します。この制限は、タイムスタンプ列を読み取るクエリにのみ適用されます。同じテーブルのタイムスタンプ以外の列のみを含むクエリは成功します。

  失敗したクエリは、次のようなメッセージを返します: 

  GENERIC\$1INTERNAL\$1ERROR: クラス org.apache.hadoop.io.ArrayWritable をクラス org.apache.hadoop.hive.serde2.io.TimestampWritableV2 にキャストできません (org.apache.hadoop.io.ArrayWritable と org.apache.hadoop.hive.serde2.io.TimestampWritableV2 は、ローダー io.trino.server.PluginClassLoader @75c67992 の名前のないモジュール内にあります)
+ **0.15.0 Hudi Connector での Lake Formation アクセス許可** – この制限は、テーブルプロパティ `athena_enable_native_hudi_connector_implementation` を `true` に設定してネイティブ Hudi コネクタ (バージョン 0.15.0) の使用にオプトインする場合にのみ適用されます。デフォルトでは、Athena は Hudi コネクタバージョン 0.14.0 を使用しますが、この追加のアクセス許可は必要ありません。Lake Formation で保護されたテーブルをクエリするには、テーブルのデータロケーションと `.hoodie` メタデータディレクトリの両方に Lake Formation アクセス許可を付与する必要があります。たとえば、Hudi テーブルが `s3://bucket/hudi-table/` にある場合は、Lake Formation で `s3://bucket/hudi-table/` と `s3://bucket/hudi-table/.hoodie/` の両方を登録してそれらにアクセス許可を付与する必要があります。`.hoodie` ディレクトリには、クエリ計画中に Athena が読み取る必要があるメタデータファイル (`hoodie.properties` など) が含まれています。`.hoodie` ディレクトリへのアクセス許可がない場合、クエリはアクセス許可拒否エラーで失敗します。