

# Athena の問題をトラブルシューティングする
<a name="troubleshooting-athena"></a>

Athena チームは、お客様の問題から以下のトラブルシューティング情報を収集しました。これは包括的なものではありませんが、一般的なパフォーマンス、タイムアウト、およびメモリ不足の問題に関するアドバイスが含まれています。

**Topics**
+ [CREATE TABLE AS SELECT (CTAS)](#troubleshooting-athena-create-table-as-select-ctas)
+ [データファイルの問題](#troubleshooting-athena-data-file-issues)
+ [Linux Foundation Delta Lake テーブル](#troubleshooting-athena-delta-lake-tables)
+ [横串検索](#troubleshooting-athena-federated-queries)
+ [JSON 関連のエラー](#troubleshooting-athena-json-related-errors)
+ [MSCK REPAIR TABLE](#troubleshooting-athena-msck-repair-table)
+ [出力の問題](#troubleshooting-athena-output-issues)
+ [Parquet の問題](#troubleshooting-athena-parquet-issues)
+ [パーティションの問題](#troubleshooting-athena-partitioning-issues)
+ [アクセス許可](#troubleshooting-athena-permissions)
+ [クエリ構文の問題](#troubleshooting-athena-query-syntax-issues)
+ [クエリタイムアウトの問題](#troubleshooting-athena-query-timeout-issues)
+ [スロットリングの問題](#troubleshooting-athena-throttling-issues)
+ [ビュー](#troubleshooting-athena-views)
+ [ワークグループ](#troubleshooting-athena-workgroups)
+ [その他のリソース](#troubleshooting-athena-additional-resources)
+ [Athena エラーカタログ](error-reference.md)

## CREATE TABLE AS SELECT (CTAS)
<a name="troubleshooting-athena-create-table-as-select-ctas"></a>

### 同時 CTAS ステートメントで重複したデータが発生する
<a name="troubleshooting-athena-duplicated-data-occurs-with-concurrent-ctas-statements"></a>

Athena は、CTAS の同時検証を維持しません。同じ場所に対して重複した CTAS ステートメントが同時に存在しないことを確認するようにしてください。CTAS または INSERT INTO ステートメントが失敗した場合でも、ステートメントで指定されたデータの場所に孤立したデータが残される可能性があります。

### HIVE\_TOO\_MANY\_OPEN\_PARTITIONS
<a name="troubleshooting-athena-ctas-hive-too-many-open-partitions"></a>

CTAS ステートメントを使用して 100 を超えるパーティションを持つテーブルを作成すると、HIVE\_TOO\_MANY\_OPEN\_PARTITIONS: Exceeded limit of 100 open writers for partitions/buckets (HIVE\_TOO\_MANY\_OPEN\_PARTITIONS: パーティション/バケットのオープンライターの制限である 100 を超えました) エラーメッセージが表示されることがあります。これらの制限を回避するには、CTAS ステートメントと、それぞれ最大 100 個のパーティションを作成または挿入する一連の `INSERT INTO` ステートメントを使用できます。詳細については、「[CTAS および INSERT INTO を使用して 100 パーティションの制限を回避する](ctas-insert-into.md)」を参照してください。

## データファイルの問題
<a name="troubleshooting-athena-data-file-issues"></a>

### Athena が隠しファイルを読み取れない
<a name="troubleshooting-athena-athena-cannot-read-hidden-files"></a>

Athena は、アンダースコア (\_) またはドット (.) で始まるソースファイルを隠しファイルとして扱います。この制限を回避するには、ファイルの名前を変更します。

### AWS Glue クローラーから除外したファイルを Athena が読み取ってしまう
<a name="troubleshooting-athena-athena-reads-files-that-i-excluded-from-the-glue-crawler"></a>

Athena は、AWS Glue クローラーに指定した[除外パターン](https://docs.aws.amazon.com/glue/latest/dg/define-crawler.html#crawler-data-stores-exclude)を認識しません。例えば、`.csv` と `.json` ファイルの両方が含まれる Amazon S3 バケットがある場合、`.json` ファイルをクローラーから除外しても、Athena は両方のファイルのグループをクエリします。これを回避するには、除外するファイルを別の場所に配置します。

### HIVE\_BAD\_DATA: Error parsing field value
<a name="troubleshooting-athena-hive_bad_data-error-parsing-field-value"></a>

このエラーは、以下のシナリオで発生する可能性があります。
+ テーブルで定義されているデータ型がソースデータと一致しない、または単一のフィールドに異なるデータ型が含まれている。解決案については、「AWS ナレッジセンター」の「[My Amazon Athena query fails with the error "HIVE\_BAD\_DATA: Error parsing field value for field x: For input string: "12312845691""](https://aws.amazon.com/premiumsupport/knowledge-center/athena-hive-bad-data-parsing-field-value/)」(Amazon Athena のクエリが失敗してエラー「HIVE\_BAD\_DATA: Error parsing field value for field x: For input string: "12312845691"」が表示される) を参照してください。
+ 整数フィールドに NULL 値が存在する。回避策の 1 つは、null 値を `string` とした列を作成してから、`CAST` を使用してクエリのフィールドを変換して、null にデフォルト値の `0` を提供することです。詳細については、「AWS ナレッジセンター」の「[When I query CSV data in Athena, I get the error "HIVE\_BAD\_DATA: Error parsing field value '' for field x: For input string: ""](https://aws.amazon.com/premiumsupport/knowledge-center/athena-hive-bad-data-error-csv/)」(Athena で CSV データをクエリすると、エラー「HIVE\_BAD\_DATA: Error parsing field value '' for field x: For input string: ""」が表示される) を参照してください

### HIVE\_CANNOT\_OPEN\_SPLIT: Hive split s3://amzn-s3-demo-bucket を開くときにエラーが発生しました
<a name="troubleshooting-athena-hive_cannot_open_split-error-opening-hive-split-s3bucket-name"></a>

このエラーは、次が原因で発生する可能性があります。
+ クエリが Amazon S3 や Lake Formation などのダウンストリームサービスでレート制限を超えた。エラーメッセージには、`AmazonS3Exception: Please reduce your request rate` や `AWSLakeFormationException: Rate exceeded` などの追加情報が含まれる場合があります。トラブルシューティングの詳細については「[サービスレベルでのスロットリングを軽減](performance-tuning-s3-throttling-reduce-throttling-at-the-service-level.md)」を参照してください。
+ クエリで形式が正しくないファイルが発生した。エラーメッセージには通常、不正な形式のファイルの Amazon S3 URI と追加情報が含まれます。
+ クエリの実行中にファイルが削除された。エラーメッセージには通常、ファイルの Amazon S3 URI が含まれ、`AmazonS3Exception: The specified key does not exist` または `Error Code: NoSuchKey` が含まれる場合があります。
+ クエリの実行中にファイルが置き換えられた。通常、エラーメッセージにはファイルの Amazon S3 URI のみが含まれます。

### HIVE\_CURSOR\_ERROR: com.amazonaws.services.s3.model.AmazonS3Exception: The specified key does not exist
<a name="troubleshooting-athena-hive_cursor_error-com.amazonaws.services.s3.model.amazons3exception-the-specified-key-does-not-exist"></a>

このエラーは通常、クエリの実行中にファイルが削除されたときに発生します。クエリを再度実行する、またはワークフローをチェックして、クエリの実行中に別のジョブまたはプロセスがファイルを変更していないかどうかを確認してください。

### HIVE\_CURSOR\_ERROR: Unexpected end of input stream
<a name="troubleshooting-athena-hive_cursor_error-unexpected-end-of-input-stream"></a>

このメッセージは、ファイルが破損しているか、空であることを示します。ファイルの整合性を確認し、クエリを再度実行してください。

### HIVE\_FILESYSTEM\_ERROR: Incorrect fileSize {{1234567}} for file
<a name="troubleshooting-athena-hive_filesystem_error-incorrect-file-size"></a>

このメッセージは、クエリプランとクエリ実行の間でファイルが変更された場合に発生する可能性があります。通常、Amazon S3 上のファイルがインプレイスで置き換えられた場合に発生します (例えば、オブジェクトが既に存在するキーに対して `PUT` が実行された場合など)。Athena では、クエリ実行時のファイル内容の削除や置換はサポートされていません。このエラーを回避するには、クエリが実行されない場合にファイルを上書きまたは削除するジョブ、もしくは新しいファイルまたはパーティションにのみデータを書き込むジョブをスケジュールします。

### HIVE\_UNKNOWN\_ERROR: Unable to create input format
<a name="troubleshooting-athena-hive_unknown_error-unable-to-create-input-format"></a>

このエラーは、以下のような問題が原因になっている可能性があります。
+ AWS Glue クローラーがデータ形式を分類できなかった
+ 特定の AWS Glue テーブル定義プロパティが空になっている
+ Athena が Amazon S3 にあるファイルのデータ形式をサポートしていない

詳細については、「AWS ナレッジセンター」の「[Athena の『unable to create input format (入力形式を作成できません)』というエラーを解決する方法を教えてください](https://aws.amazon.com/premiumsupport/knowledge-center/athena-unable-to-create-input-format/)」を参照、またはナレッジセンターの[動画](https://www.youtube.com/watch?v=CGzXW3hRa8g)をご覧ください。

### クエリ結果を保存するために提供された S3 の場所が無効になっている
<a name="troubleshooting-athena-the-s3-location-provided-to-save-your-query-results-is-invalid."></a>

クエリ結果のために有効な S3 の場所を指定していることを確認します。詳細については、「[クエリ結果と最近のクエリを操作する](querying.md)」トピックの「[クエリ結果の場所を指定する](query-results-specify-location.md)」を参照してください。

## Linux Foundation Delta Lake テーブル
<a name="troubleshooting-athena-delta-lake-tables"></a>

### Delta Lake テーブルのスキーマが同期されていません
<a name="troubleshooting-athena-delta-lake-table-schema-out-of-sync"></a>

AWS Glue に古いスキーマを含む Delta Lake テーブルをクエリするとき、次のエラーメッセージが表示されることがあります。

```
INVALID_GLUE_SCHEMA: Delta Lake table schema in Glue does not match the most recent schema of the 
Delta Lake transaction log. Please ensure that you have the correct schema defined in Glue.
```

Athena に追加した後に AWS Glue でスキーマを変更した場合、最新の情報とならない可能性があります。スキーマを更新するには、次のいずれかのステップを実行します。
+ AWS Glue で [AWS Glue クローラー](https://docs.aws.amazon.com/glue/latest/dg/add-crawler.html)を実行します。
+ Athena で[テーブルをドロップ](drop-table.md)して、もう一度[作成](create-table.md)します。
+ Athena の [ALTER TABLE ADD COLUMNS](alter-table-add-columns.md) ステートメントを使用するか、[AWS Glue でテーブルスキーマを編集](https://docs.aws.amazon.com/glue/latest/dg/console-tables.html#console-tables-details)し、欠落している列を手動で追加します。

## 横串検索
<a name="troubleshooting-athena-federated-queries"></a>

### ListTableMetadata の呼び出し中にタイムアウトが発生した
<a name="troubleshooting-athena-federated-queries-list-table-metadata-timeout"></a>

[ListTableMetadata](https://docs.aws.amazon.com/athena/latest/APIReference/API_ListTableMetadata.html) API の呼び出しは、データソースに多くのテーブルが存在する場合、データソースが遅い場合、またはネットワークが遅い場合にタイムアウトすることがあります。この問題のトラブルシューティングを行うには、次のステップを使用します。
+ **テーブル数を確認** — テーブルが 1,000 を超える場合、テーブル数を減らしてみてください。最速の `ListTableMetadata` 応答を得るには、カタログあたりのテーブル数を 1000 未満にすることをお勧めします。
+ **Lambda 設定を確認する** — Lambda 関数の動作をモニタリングすることは非常に重要です。フェデレーレーションカタログを使用するときは、Lambda 関数の実行ログを確認してください。結果に基づいて、メモリとタイムアウトの値を調整してください。タイムアウトに関する潜在的な問題を特定するには、Lambda 設定を再確認してください。詳細については、「*AWS Lambda デベロッパーガイド*」の「[関数タイムアウトの設定 (コンソール)](https://docs.aws.amazon.com/lambda/latest/dg/configuration-function-common.html#configuration-timeout-console)」を参照してください。
+ **フェデレーションデータソースのログを確認する** — フェデレーションデータソースからのログとエラーメッセージを調べて、問題やエラーがないかどうかを確認します。ログからはタイムアウトの原因に関する貴重な情報を得ることができます。
+ **`StartQueryExecution` をメタデータの取得に使用** — テーブルが 1,000 を超える場合、フェデレーションコネクタを使用してメタデータを取得するのに予想以上に時間がかかることがあります。[StartQueryExecution](https://docs.aws.amazon.com/athena/latest/APIReference/API_StartQueryExecution.html) の非同期性により、Athena がクエリを最適な方法で実行できるため、`ListTableMetadata` の代替として `StartQueryExecution` を使用することを検討してください。次の AWS CLI の例は、`ListTableMetadata` の代わりに `StartQueryExecution` を使用してデータカタログにあるテーブルのメタデータをすべて取得する方法を示しています。

  まず、次の例のように、すべてのテーブルを取得するクエリを実行します。

  ```
  aws athena start-query-execution --region us-east-1 \
  --query-string "SELECT table_name FROM information_schema.tables LIMIT 50" \
  --work-group "{{your-work-group-name}}"
  ```

  その後、次の例のように、個別のテーブルのメタデータを取得します。

  ```
  aws athena start-query-execution --region us-east-1 \
  --query-string "SELECT * FROM information_schema.columns \
  WHERE table_name = '{{your-table-name}}' AND \
  table_catalog = '{{your-catalog-name}}'" \
  --work-group "{{your-work-group-name}}"
  ```

  結果を取得するまでにかかる時間は、カタログ内のテーブル数によって異なります。

フェデレーションクエリのトラブルシューティングについては、GitHub の「awslabs/aws-athena-query-federation」セクションで「[Common\_Problems](https://github.com/awslabs/aws-athena-query-federation/wiki/Common_Problems)」または個々の「[Athena データソースコネクタ](connectors-available.md)」のドキュメントを参照してください。

## JSON 関連のエラー
<a name="troubleshooting-athena-json-related-errors"></a>

### JSON データを読み込もうとしたときの NULL または不正なデータエラー
<a name="troubleshooting-athena-null-or-incorrect-data-errors-when-trying-to-read-json-data"></a>

JSON データを読み込もうとしたときの NULL または不正なデータエラーには、多くの原因が考えられます。OpenX SerDe の使用時にエラーを発生させている行を特定するには、`ignore.malformed.json` を `true` に設定します。不正な形式のレコードが NULL として返されます。詳細については、AWS ナレッジセンターの「[Amazon Athena で JSON データを読み込もうとするとエラーが発生します](https://aws.amazon.com/premiumsupport/knowledge-center/error-json-athena/)」を参照、またはナレッジセンターの[動画](https://youtu.be/ME7Pv1qPFLM)をご覧ください。

### HIVE\_BAD\_DATA: Error parsing field value for field 0: java.lang.String cannot be cast to org.openx.data.jsonserde.json.JSONObject
<a name="troubleshooting-athena-hive-bad-data-openx-json-serde"></a>

[OpenX JSON SerDe](openx-json-serde.md) は、Athena クエリの列の解析に失敗した場合にこのエラーをスローします。これは、列を `map` または `struct` として定義したが、基盤となるデータが実際には `string`、`int`、またはその他のプリミティブ型であるという場合に発生する可能性があります。

### HIVE\_CURSOR\_ERROR: Row is not a valid JSON object - JSONException: Duplicate key
<a name="troubleshooting-athena-hive_cursor_error-row-is-not-a-valid-json-object---jsonexception-duplicate-key"></a>

このエラーは、Athena を使用して、大文字と小文字が異なった同じ名前のタグが複数ある AWS Config リソースをクエリする場合に発生します。解決策は、`WITH SERDEPROPERTIES 'case.insensitive'='false'` を使用して `CREATE TABLE` を実行し、名前をマッピングすることです。`case.insensitive` およびマッピングについては、「[JSON SerDe ライブラリ](json-serde.md)」を参照してください。詳細については、「AWS ナレッジセンター」の「[Athena で AWS Config からファイルを読み込むときの「HIVE\_CURSOR\_ERROR: Row is not a valid JSON Object - JSONException: Duplicate key」を解決する方法を教えてください。](https://aws.amazon.com/premiumsupport/knowledge-center/json-duplicate-key-error-athena-config/)」を参照してください。

### プリティプリントされた JSON に伴う HIVE\_CURSOR\_ERROR メッセージ
<a name="troubleshooting-athena-json-serde-hive-cursor-error"></a>

[Hive JSON SerDe](hive-json-serde.md) および [OpenX JSON SerDe](openx-json-serde.md) ライブラリでは、各 JSON ドキュメントが、レコード内のフィールドを区切る行終端文字がない 1 行のテキストに存在することが想定されます。JSON テキストがプリティプリント形式の場合、テーブルを作成した後にクエリを実行しようとすると、以下のようなエラーメッセージが表示される場合があります。「HIVE\_CURSOR\_ERROR: Row is not a valid JSON Object」、または「HIVE\_CURSOR\_ERROR: JsonParseException: Unexpected end-of-input: expected close marker for OBJECT」。詳細については、GitHub の OpenX SerDe のドキュメントで「[JSON Data Files](https://github.com/rcongiu/Hive-JSON-Serde#json-data-files)」(JSON データファイル) を参照してください。

### 複数の JSON レコードが 1 の SELECT COUNT を返す
<a name="troubleshooting-athena-multiple-json-records-return-a-select-count-of-1"></a>

[OpenX JSON SerDe](openx-json-serde.md) を使用している場合は、レコードが改行文字で区切られていることを確認してください。詳細については、「AWS ナレッジセンター」の「[入力 JSON ファイルに複数のレコードが含まれているにもかかわらず、Amazon Athena の SELECT COUNT クエリが 1 つのレコードのみを返す](https://aws.amazon.com/premiumsupport/knowledge-center/select-count-query-athena-json-records/)」を参照してください。

### カスタム JSON 分類子を使用する AWS Glue クローラーによって作成されたテーブルをクエリできない
<a name="troubleshooting-athena-cannot-query-a-table-created-by-a-glue-crawler-that-uses-a-custom-json-classifier"></a>

Athena エンジンは[カスタム JSON 分類子](https://docs.aws.amazon.com/glue/latest/dg/custom-classifier.html#custom-classifier-json)をサポートしません。この問題を回避するには、カスタム分類子なしで、新しいテーブルを作成します。JSON を変換するには、CTAS を使用するか、ビューを作成することができます。例えば、配列を使用している場合は、UNNEST オプションを使用して JSON をフラット化できます。もう 1 つのオプションは、カスタム分類子をサポートする AWS Glue ETL ジョブを使用し、Amazon S3 でデータを Parquet に変換してから、それを Athena でクエリすることです。

## MSCK REPAIR TABLE
<a name="troubleshooting-athena-msck-repair-table"></a>

MSCK REPAIR TABLE 関連の問題については、「[MSCK REPAIR TABLE](msck-repair-table.md)」ページの「[考慮事項と制限事項](msck-repair-table.md#msck-repair-table-considerations)」および「[トラブルシューティング](msck-repair-table.md#msck-repair-table-troubleshooting)」セクションを参照してください。

## 出力の問題
<a name="troubleshooting-athena-output-issues"></a>

### Unable to verify/create output bucket
<a name="troubleshooting-athena-unable-to-verifycreate-output-bucket"></a>

このエラーは、指定されたクエリ結果の場所が存在しない、または適切な許可が存在しない場合に発生します。詳細については、「AWS ナレッジセンター」の「[How do I resolve the "unable to verify/create output bucket" error in Amazon Athena?](https://aws.amazon.com/premiumsupport/knowledge-center/athena-output-bucket-error/)」(Amazon Athena の「unable to verify/create output bucket」エラーの解決方法) を参照してください。

### TIMESTAMP 結果が空になる
<a name="troubleshooting-athena-timestamp-result-is-empty"></a>

Athena には Java TIMESTAMP 形式が必要です。詳細については、「AWS ナレッジセンター」の「[Amazon Athena のテーブルにクエリを実行すると、TIMESTAMP の結果が空になる](https://aws.amazon.com/premiumsupport/knowledge-center/query-table-athena-timestamp-empty/)」を参照してください。

### Athena クエリ出力を CSV 以外の形式で保存する
<a name="troubleshooting-athena-store-athena-query-output-in-a-format-other-than-csv"></a>

デフォルトでは、Athena は CSV 形式でのみファイルを出力します。異なる形式で `SELECT` クエリの結果を出力するには、`UNLOAD` ステートメントを使用できます。詳細については、「[UNLOAD](unload.md)」を参照してください。CTAS クエリで `format` [テーブルプロパティ](create-table-as.md#ctas-table-properties)を使用して、出力形式を設定することもできます。`UNLOAD` とは異なり、CTAS ではテーブルの作成が必要です。詳細については、「AWS ナレッジセンター」の「[Athena クエリ出力を、CSV 以外の形式 (圧縮形式など) で保存する方法を教えてください](https://aws.amazon.com/premiumsupport/knowledge-center/athena-query-output-different-format/)」を参照してください。

### The S3 location provided to save your query results is invalid
<a name="troubleshooting-athena-the-s3-location-provided-to-save-your-query-results-is-invalid"></a>

このエラーメッセージは、出力バケットの場所が、クエリを実行したリージョンと同じリージョンにない場合に表示される可能性があります。これを回避するには、クエリを実行するリージョンにあるクエリ結果の場所を指定します。手順については、「[クエリ結果の場所を指定する](query-results-specify-location.md)」を参照してください。

## Parquet の問題
<a name="troubleshooting-athena-parquet-issues"></a>

### org.apache.parquet.io.GroupColumnIO cannot be cast to org.apache.parquet.io.PrimitiveColumnIO
<a name="troubleshooting-athena-org.apache.parquet.io.groupcolumnio-cannot-be-cast-to-org.apache.parquet.io.primitivecolumnio"></a>

このエラーは、Parquet スキーマの不一致が原因で発生します。AWS Glue で、非プリミティブ型 (`array` など) を持つ列がプリミティブ型 (`string` など) として宣言されています。この問題をトラブルシューティングするには、ファイルのデータスキーマをチェックして、それを AWS Glue で宣言されたスキーマと比較してください。

### Parquet 統計の問題
<a name="troubleshooting-athena-parquet-statistics-issues"></a>

Parquet データを読み取ると、次のようなエラーメッセージが表示されることがあります。

```
HIVE_CANNOT_OPEN_SPLIT: Index x out of bounds for length y
HIVE_CURSOR_ERROR: Failed to read x bytes
HIVE_CURSOR_ERROR: FailureException at Malformed input: offset=x
HIVE_CURSOR_ERROR: FailureException at java.io.IOException: 
can not read class org.apache.parquet.format.PageHeader: Socket is closed by peer.
```

この問題を回避するには、次の例のように [CREATE TABLE](create-table.md) ステートメントまたは [ALTER TABLE SET TBLPROPERTIES](alter-table-set-tblproperties.md) ステートメントを使用して Parquet SerDe `parquet.ignore.statistics` プロパティを `true` に設定します。

CREATE TABLE の例

```
...
ROW FORMAT SERDE  
'org.apache.hadoop.hive.ql.io.parquet.serde.ParquetHiveSerDe' 
WITH SERDEPROPERTIES ('parquet.ignore.statistics'='true')  
STORED AS PARQUET 
...
```

ALTER TABLE の例

```
ALTER TABLE ... SET TBLPROPERTIES ('parquet.ignore.statistics'='true')
```

Parquet Hive については、「[Parquet SerDe](parquet-serde.md)」を参照してください。

## パーティションの問題
<a name="troubleshooting-athena-partitioning-issues"></a>

### MSCK REPAIR TABLE が古いパーティションを削除しない
<a name="troubleshooting-athena-msck-repair-table-does-not-remove-stale-partitions"></a>

Amazon S3 でパーティションを手動で削除してから MSCK REPAIR TABLE を実行すると、「Partitions missing from filesystem」というエラーメッセージが表示される場合があります。これは、MSCK REPAIR TABLE がテーブルメタデータから古いパーティションを削除しないために発生します。[ALTER TABLE DROP PARTITION](alter-table-drop-partition.md) を使用して、古いパーティションを手動で削除してください。詳細については、[MSCK REPAIR TABLE](msck-repair-table.md) トピックの「トラブルシューティング」セクションを参照してください。

### MSCK REPAIR TABLE の失敗
<a name="troubleshooting-athena-msck-repair-table-failure"></a>

大量のパーティション (100,000 を超えるなど) が特定のテーブルに関連付けられている場合、`MSCK REPAIR TABLE` がメモリ制限のために失敗する場合があります。この制限を回避するには、その代わりに [ALTER TABLE ADD PARTITION](alter-table-add-partition.md) を使用します。

### MSCK REPAIR TABLE がパーティションを検出しても、それらを AWS Glue に追加しない
<a name="troubleshooting-athena-msck-repair-table-detects-partitions-but-doesnt-add-them-to-glue"></a>

この問題は、Amazon S3 パスが小文字ではなくキャメルケースになっている、または IAM ポリシーが `glue:BatchCreatePartition` アクションを許可しない場合に発生する可能性があります。詳細については、「AWS ナレッジセンター」の「[MSCK REPAIR TABLE は Athena のパーティションを検出しますが、それらを AWS Glue Data Catalog に追加しません](https://aws.amazon.com/premiumsupport/knowledge-center/athena-aws-glue-msck-repair-table/)」を参照してください。

### dd-MM-yyyy-HH-mm-ss または yyyy-MM-dd の日付形式でのパーティション射影範囲が機能しない
<a name="troubleshooting-athena-partition-projection-ranges-with-the-date-format-of-dd-mm-yyyy-hh-mm-ss-or-yyyy-mm-dd-do-not-work"></a>

正しく動作させるには、日付形式を `yyyy-MM-dd HH:00:00` にする必要があります。詳細については、Stack Overflow 記事の「[Athena Partition Projection Not Working As Expected](https://stackoverflow.com/questions/63943920/athena-partition-projection-not-working-as-expected)」を参照してください。

### PARTITION BY が BIGINT 型をサポートしない
<a name="troubleshooting-athena-partition-by-doesnt-support-the-bigint-type"></a>

データ型を `string` に変換してから再試行してください。

### 意味のあるパーティションがない
<a name="troubleshooting-athena-no-meaningful-partitions-available"></a>

このエラーメッセージは通常、パーティション設定が破損していることを意味します。この問題を解決するには、テーブルをドロップして、新しいパーティションでテーブルを作成します。

### パーティション射影は、範囲パーティションと連動しません。
<a name="troubleshooting-athena-partition-projection-does-not-work-in-conjunction-with-range-partitions"></a>

時間範囲単位の [projection.{{<columnName>}}.interval.unit](partition-projection-supported-types.md#partition-projection-date-type) が、パーティションの区切り文字と一致することを確認してください。例えば、パーティションが日で区切られている場合、時間の範囲単位は機能しません。

### 範囲をハイフンで指定するとパーティション投影エラーが発生します
<a name="troubleshooting-athena-partition-projection-range-issue-with-hyphen"></a>

`range` テーブルプロパティをカンマの代わりにハイフンで指定すると、「INVALID\_TABLE\_PROPERTY: For input string: "{{number}}-{{number}}"」のようなエラーが表示されます。範囲の値は、ハイフンではなくカンマで区切ってください。詳細については、「[整数型](partition-projection-supported-types.md#partition-projection-integer-type)」を参照してください。

### HIVE\_UNKNOWN\_ERROR: Unable to create input format
<a name="troubleshooting-athena-hive_unknown_error-unable-to-create-input-format-1"></a>

各 Glue パーティションが独自の固有な入力形式を単独で持っているため、1 つまたは複数の Glue パーティションが異なる形式で宣言されています。パーティションが AWS Glue でどのように定義されているか確認してください。

### HIVE\_PARTITION\_SCHEMA\_MISMATCH
<a name="troubleshooting-athena-hive_partition_schema_mismatch"></a>

パーティションのスキーマがテーブルのスキーマと異なる場合、クエリが「HIVE\_PARTITION\_SCHEMA\_MISMATCH」というエラーメッセージで失敗する場合があります。

AWS Glue データカタログでは、パーティション列があるテーブルごとにテーブルレベルでスキーマが保存され、さらにテーブル内のパーティション別にスキーマが保存されます。パーティションのスキーマは、AWS Glue クローラーがパーティション内で読み取ったデータのサンプルに基づいて作成されます。

Athena がクエリを実行するときは、テーブルのスキーマと、クエリに必要なパーティションのスキーマを検証します。この検証では、列のデータ型を順に比較し、重複する列のデータ型が一致することを確認します。これにより、テーブルの中間で列が追加/削除されるなどの予期しないオペレーションが防止されます。パーティションのスキーマがテーブルのスキーマと異なることを Athena が検知した場合、Athena はクエリを処理できない可能性があり、`HIVE_PARTITION_SCHEMA_MISMATCH` で失敗します。

この問題を解決するいくつかの方法があります。まず、データを誤って追加した場合は、スキーマの差異を生じたデータファイルを削除し、パーティションを削除して、データを最クロールできます。2 つ目は、個々のパーティションをドロップしてから Athena で `MSCK REPAIR` を実行して、テーブルのスキーマを使用してパーティションを再度作成することです。この 2 番目のオプションは、適用するスキーマで引き続きデータを正しく読み取れることが確かな場合にのみ使用します。

### SemanticException table is not partitioned but partition spec exists
<a name="troubleshooting-athena-semanticexception-table-is-not-partitioned-but-partition-spec-exists"></a>

このエラーは、`CREATE TABLE` ステートメントにパーティションが定義されていない場合に発生する可能性があります。詳細については、「AWS ナレッジセンター」の「[Athenaで『FAILED: SemanticException table is not partitioned but partition spec exists (SemanticException テーブルにはパーティション仕様が存在しますが、パーティションされていません)』というエラーのトラブルシューティング方法を教えてください](https://aws.amazon.com/premiumsupport/knowledge-center/athena-failed-semanticexception-table/)」を参照してください。

### ゼロバイト `_$folder$` ファイル
<a name="troubleshooting-athena-alter-table-add-partition-zero-byte-folder-files"></a>

`ALTER TABLE ADD PARTITION` ステートメントを実行し、既に存在するパーティションと正しくない Amazon S3 の場所を誤って指定すると、形式 `{{partition_value}}_$folder$` のゼロバイトプレースホルダーが Amazon S3 に作成されます。これらのファイルは手動で削除する必要があります。

これが起こらないようにするには、次のように、`ALTER TABLE ADD PARTITION` ステートメントで `ADD IF NOT EXISTS` 構文を使用します。

```
ALTER TABLE table_name ADD IF NOT EXISTS PARTITIION […]
```

### パーティションされたデータからレコードが返されない
<a name="troubleshooting-athena-zero-records-returned-from-partitioned-data"></a>

この問題はさまざまな理由で発生する可能性があります。考えられる原因と解決策については、AWS ナレッジセンターの「[パーティションを定義してAmazon Athenaにテーブルを作成しましたが、このテーブルに対してクエリを実行するときにゼロ個のレコードが返されるのはなぜですか?](https://aws.amazon.com/premiumsupport/knowledge-center/athena-empty-results/)」を参照してください。

[HIVE\_TOO\_MANY\_OPEN\_PARTITIONS](#troubleshooting-athena-ctas-hive-too-many-open-partitions) も参照してください。

## アクセス許可
<a name="troubleshooting-athena-permissions"></a>

### Amazon S3 のクエリ時におけるアクセス拒否エラー
<a name="troubleshooting-athena-access-denied-error-when-querying-amazon-s3"></a>

これは、バケット内のデータを読み込む許可がない、結果バケットに書き込む許可がない、または Amazon S3 パスに `us-east-1.amazonaws.com` のようなリージョンエンドポイントが含まれる場合に発生する可能性があります。詳細については、「AWS ナレッジセンター」の「[When I run an Athena query, I get an "access denied" error](https://aws.amazon.com/premiumsupport/knowledge-center/access-denied-athena/)」(Athena クエリを実行すると「access denied」エラーになる) を参照してください。

### Amazon S3 にある暗号化されたデータでの DDL クエリの実行時に、ステータスコード: 403 でアクセスが拒否される
<a name="troubleshooting-athena-access-denied-error-when-querying-amazon-s3-encrypted"></a>

「Access Denied (Service: Amazon S3; Status Code: 403; Error Code: AccessDenied; Request ID: {{<request\_id>}})」というエラーメッセージは、以下の状況が当てはまる場合に表示されることがあります。

1. `ALTER TABLE ADD PARTITION` または `MSCK REPAIR TABLE` のような DDL クエリを実行した。

1. [デフォルト暗号化](https://docs.aws.amazon.com/AmazonS3/latest/userguide/default-bucket-encryption.html)が `SSE-S3` を使用するように設定されているバケットがある。

1. また、そのバケットに、`PutObject` リクエストが `PUT` ヘッダー `"s3:x-amz-server-side-encryption": "true"` と `"s3:x-amz-server-side-encryption": "AES256"` を指定することを強制する、以下のようなバケットポリシーがある。

------
#### [ JSON ]

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Effect": "Deny",
               "Principal": "*",
               "Action": "s3:PutObject",
               "Resource": "arn:aws:s3:::{{<resource-name>}}/*",
               "Condition": {
                   "Null": {
                       "s3:x-amz-server-side-encryption": "true"
                   }
               }
           },
           {
               "Effect": "Deny",
               "Principal": "*",
               "Action": "s3:PutObject",
               "Resource": "arn:aws:s3:::{{<resource-name>}}/*",
               "Condition": {
                   "StringNotEquals": {
                       "s3:x-amz-server-side-encryption": "AES256"
                   }
               }
           }
       ]
   }
   ```

------

このような場合に推奨される解決策は、バケットのデフォルト暗号化が既に存在することを前提として、上記のようなバケットポリシーを削除することです。

### 別のアカウントにある Amazon S3 バケットのクエリ時に、ステータスコード: 403 でアクセスが拒否される
<a name="troubleshooting-athena-access-denied-with-status-code-403-when-querying-an-amazon-s3-bucket-in-another-account"></a>

このエラーは、別の AWS のサービス によって書き込まれたログをクエリしようとしており、2 番目のアカウントがバケット所有者であるがバケット内のオブジェクトを所有していない場合に発生する可能性があります。詳細については、「AWS ナレッジセンター」の「[I get the Amazon S3 exception "access denied with status code: 403" in Amazon Athena when I query a bucket in another account](https://aws.amazon.com/premiumsupport/knowledge-center/athena-access-denied-status-code-403/)」(別のアカウントでバケットをクエリすると、Amazon Athena で Amazon S3 例外「access denied with status code: 403」が発生する) を参照してください。

### IAM ロールの認証情報を使用して Athena JDBC ドライバーに接続する
<a name="troubleshooting-athena-use-IAM-role-credentials-to-connect-to-the-athena-jdbc-driver"></a>

ロールの一時的な認証情報を取得して、[Athena への JDBC 接続](connect-with-jdbc.md)を認証できます。一時的な認証情報の存続期間は最大 12 時間です。詳細については、「AWS ナレッジセンター」の「[JDBC ドライバーを使用して Athena に接続するときに、独自の IAM ロール認証情報を使用する、または別の IAM ロールに切り替える方法を教えてください](https://aws.amazon.com/premiumsupport/knowledge-center/athena-iam-jdbc-driver/)」を参照してください。

### 必要なテーブルストレージ記述子が入力されていない
<a name="troubleshooting-athena-access-denied-table-storage"></a>

これは、アクセス許可のないテーブルをクエリまたは表示しようとしたときに発生する可能性があります。そのために推奨される解決策は、AWS Lake Formation を介してリソースに対する `DESCRIBE` および `SELECT` にアクセス許可を付与することです。リソースがアカウント間で共有されており、元のリソースがアカウント A に存在し、アカウント B のリンクされたリソースに対してクエリを実行する場合、ロールにアカウント A の元のリソースに対する `DESCRIBE` アクセス許可と、アカウント B のリンクされたリソースに対する `SELECT` アクセス許可があることを確認する必要があります。

## クエリ構文の問題
<a name="troubleshooting-athena-query-syntax-issues"></a>

### 失敗: NullPointerException 名は null です
<a name="troubleshooting-athena-nullpointerexception-name-is-null"></a>

AWS Glue [CreateTable](https://docs.aws.amazon.com/glue/latest/webapi/API_CreateTable.html) API 操作や CloudFormation [https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-glue-table.html](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-glue-table.html) テンプレートを使用して、`TableType` プロパティを指定せずに Athena で使用するテーブルを作成し、`SHOW CREATE TABLE` または `MSCK REPAIR TABLE` などの DDL クエリを実行すると、「失敗: NullPointerException 名は null です」というエラーメッセージを受け取る場合があります。

このエラーを解決するには、[TableInput](https://docs.aws.amazon.com/glue/latest/webapi/API_TableInput.html) `TableType` 属性の値を AWS Glue `CreateTable` API コール、または [CloudFormation テンプレート](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-glue-table-tableinput.html)の一部として指定します。`TableType` に使用できる値には、`EXTERNAL_TABLE` や `VIRTUAL_VIEW` が含まれます。

この要件は、AWS Glue `CreateTable` API 操作や `AWS::Glue::Table` テンプレートを使用してテーブルを作成する場合にだけ適用されます。DDL ステートメントや AWS Glue クローラーを使用して Athena のテーブルを作成すると、`TableType` プロパティが自動的に定義されます。

### Function not Registered
<a name="troubleshooting-athena-function-not-registered"></a>

このエラーは、Athena がサポートしていない関数を使用しようとするときに発生します。Athena がサポートする関数のリストについては、「[Amazon Athena の関数](functions.md)」を参照する、またはクエリエディタで `SHOW FUNCTIONS` ステートメントを実行してください。独自の[ユーザー定義関数 (UDF)](querying-udf.md) を作成することもできます。詳細については、「AWS ナレッジセンター」の「[Athena の『function not registered (関数が登録されていません)』 構文エラーを解決する方法を教えてください](https://aws.amazon.com/premiumsupport/knowledge-center/athena-syntax-function-not-registered/)」を参照してください。

### GENERIC\_INTERNAL\_ERROR の例外
<a name="troubleshooting-athena-generic-internal-error"></a>

`GENERIC_INTERNAL_ERROR` の例外には、次のようなさまざまな原因が考えられます。
+ **GENERIC\_INTERNAL\_ERROR: Null** — この例外は、次のいずれかの条件で表示される場合があります。
  + テーブルで定義された列のデータ型と実際のデータセットで使用されるデータ型との間に、スキーマの不一致がある。
  + 不正確な構文で `CREATE TABLE AS SELECT` (CTAS) クエリを実行している。
+ **GENERIC\_INTERNAL\_ERROR: parent builder is null** — この例外は、データ型 `array` の列を持つテーブルをクエリし、OpenCSVSerDe ライブラリを使用している場合に表示されることがあります。OpenCSVSerde 形式では、`array` データ型はサポートされません。
+ **GENERIC\_INTERNAL\_ERROR: Value exceeds MAX\_INT** — この例外は、ソースデータ列がデータ型 `INT` で定義されており、値が 2,147,483,647 より大きい場合に表示される場合があります。
+ **GENERIC\_INTERNAL\_ERROR: Value exceeds MAX\_BYTE** — この例外は、ソースデータ列の値がデータ型 `BYTE` の許容サイズを超える場合に表示される場合があります。データ型 `BYTE` は `TINYINT` に相当します。`TINYINT` は、2 の補数形式の 8 ビット符号付き整数で、最小値は -128、最大値は 127 です。
+ **GENERIC\_INTERNAL\_ERROR: Number of partition values does not match number of filters** — Amazon Simple Storage Service (Amazon S3) データのパーティションに矛盾がある場合、この例外が表示される場合があります。次のいずれかの条件の下では、パーティションに矛盾がある可能性があります。
  + Amazon S3 のパーティションが変更された (例: 新しいパーティションが追加された)。
  + テーブル内のパーティション列の数が、パーティションメタデータの列の数と一致しない。

これらの各エラーの詳細については、「AWS ナレッジセンター」の「[Amazon Athenaのテーブルをクエリする際に発生する、『GENERIC\_INTERNAL\_ERROR』エラーを解決する方法を教えてください。](https://aws.amazon.com/premiumsupport/knowledge-center/athena-generic-internal-error/)」を参照してください。

### Number of matching groups doesn't match the number of columns
<a name="troubleshooting-athena-number-of-matching-groups-doesnt-match-the-number-of-columns"></a>

このエラーは、CREATE TABLE ステートメントで [Regex SerDe](regex-serde.md) を使用しており、regex マッチンググループの数が、テーブルに指定した列の数と一致しない場合に発生します。詳細については、「AWS ナレッジセンター」の「[How do I resolve the RegexSerDe error "number of matching groups doesn't match the number of columns" in amazon Athena?](https://aws.amazon.com/premiumsupport/knowledge-center/regexserde-error-athena-matching-groups/)」(Amazon Athena の RegexSerDe エラー「number of matching groups doesn't match the number of columns」の解決方法) を参照してください。

### queryString failed to satisfy constraint: Member must have length less than or equal to 262144
<a name="troubleshooting-athena-querystring-failed-to-satisfy-constraint-member-must-have-length-less-than-or-equal-to-262144"></a>

Athena でのクエリ文字列の最大長 (262,144 バイト) は、調整可能なクォータではありません。AWS サポート はクォータを増やすことはできませんが、長いクエリを小さなクエリに分割することで問題を回避できます。詳細については、「AWS ナレッジセンター」の「[Athena でクエリ文字列の最大長を増やすにはどうすればよいですか?](https://aws.amazon.com/premiumsupport/knowledge-center/athena-query-string-length/)」を参照してください。

### SYNTAX\_ERROR: Column cannot be resolved
<a name="troubleshooting-athena-syntax_error-column-cannot-be-resolved"></a>

バイトオーダーマーク (BOM) を持つ UTF-8 でエンコードされた CSV ファイルから AWS Glue クローラーによって作成されたテーブルをクエリすると、このエラーが発生することがあります。AWS Glue は BOM を認識せず、疑問符に変更します。疑問符は Amazon Athena では認識されません。解決策は、Athena または AWS Glue で疑問符を削除することです。

### 関数呼び出しの引数が多すぎます
<a name="troubleshooting-athena-too-many-arguments"></a>

Athena エンジンバージョン 3 では、関数に含まれる引数は 127 個を超えて取ることができません。この制限は、デザインによるものです。127 個を超えるパラメーターを持つ関数を使用すると、次のようなエラーメッセージが表示されます。

TOO\_MANY\_ARGUMENTS: 行 {{nnn}}:{{nn}}: 関数呼び出し {{function\_name}}() の引数が多すぎます。

この問題を解決するには、関数呼び出しごとに使用するパラメータを少なくします。

## クエリタイムアウトの問題
<a name="troubleshooting-athena-query-timeout-issues"></a>

Athena クエリでタイムアウトエラーが発生した場合、CloudTrail ログを確認してください。AWS Glue または Lake Formation API のスロットリングが原因で、クエリがタイムアウトすることがあります。このようなエラーが発生すると、対応するエラーメッセージは、スロットリングの問題ではなく、クエリのタイムアウトを示している可能性があります。問題のトラブルシューティングを行うには、サポート に連絡する前に CloudTrail のログを確認してください。詳細については、「[AWS CloudTrail ログをクエリする](cloudtrail-logs.md)」および「[AWS CloudTrail を使用して Amazon Athena API コールのログを記録する](monitor-with-cloudtrail.md)」を参照してください。

`ListTableMetadata` API を呼び出す際のフェデレーションクエリのタイムアウトの問題については、「[ListTableMetadata の呼び出し中にタイムアウトが発生した](#troubleshooting-athena-federated-queries-list-table-metadata-timeout)」を参照してください。

## スロットリングの問題
<a name="troubleshooting-athena-throttling-issues"></a>

クエリが Amazon S3、AWS KMS、AWS Glue、AWS Lambda など、依存しているサービスの制限を超える場合は、以下のメッセージが発生すると予想できます。これらの問題を解決するには、同じアカウントから発信される同時コールの数を減らします。


****  

| サービス | エラーメッセージ | 
| --- | --- | 
| AWS Glue | AWSGlueException: Rate exceeded. | 
| AWS KMS | You have exceeded the rate at which you may call KMS. Reduce the frequency of your calls. | 
| AWS Lambda | Rate exceeded<br />TooManyRequestsException | 
| Amazon S3 | AmazonS3Exception: Please reduce your request rate. | 

Athena を使用するときに Amazon S3 のスロットリングを防ぐ方法については、「[Amazon S3 のスロットリングを防ぐ](performance-tuning-s3-throttling.md)」を参照してください。

## ビュー
<a name="troubleshooting-athena-views"></a>

### Apache Hive シェルで作成されたビューが Athena で機能しない
<a name="troubleshooting-athena-views-created-in-hive-shell-do-not-work-in-athena"></a>

これらの実装は根本的に異なるため、Apache Hive シェルで作成されたビューには Athena との互換性がありません。この問題を解決するには、Athena でビューを再度作成します。

### View is stale; it must be re-created
<a name="troubleshooting-athena-view-is-stale-it-must-be-re-created"></a>

このエラーは、ビューの基盤であるテーブルが変更またはドロップされた場合に表示される可能性があります。解決策は、ビューを再度作成することです。詳細については、「AWS ナレッジセンター」の「[How can I resolve the "view is stale; it must be re-created" error in Athena?](https://aws.amazon.com/premiumsupport/knowledge-center/athena-view-is-stale-error/)」(Athena の「view is stale; it must be re-created」エラーの解決方法) を参照してください。

## ワークグループ
<a name="troubleshooting-athena-workgroups"></a>

ワークグループの問題のトラブルシューティングについては、「[ワークグループエラーのトラブルシューティング](workgroups-troubleshooting.md)」(ワークグループのトラブルシューティング) を参照してください。

## その他のリソース
<a name="troubleshooting-athena-additional-resources"></a>

以下のページには、Amazon Athena での問題のトラブルシューティングに関する追加の情報が記載されています。
+ [Athena エラーカタログ](error-reference.md)
+ [サービスクォータ](service-limits.md)
+ [Amazon Athena での SQL クエリに関する考慮事項と制約事項](other-notable-limitations.md)
+ [サポートされない DDL](unsupported-ddl.md)
+ [データベース、テーブル、列に名前を付ける](tables-databases-columns-names.md)
+ [Amazon Athena のデータ型](data-types.md)
+ [データ用に SerDe を選択する](supported-serdes.md)
+ [Athena で圧縮を使用する](compression-formats.md)
+ [クエリで予約キーワードをエスケープする](reserved-words.md)
+ [ワークグループエラーのトラブルシューティング](workgroups-troubleshooting.md)

以下の AWS リソースも役に立ちます。
+  [AWS ナレッジセンターの Athena に関するトピック](https://aws.amazon.com/premiumsupport/knowledge-center/#Amazon_Athena) 
+  [AWS re:Post の Amazon Athena に関する質問](https://repost.aws/tags/TA78iVOM7gR62_QqDe2-CmiA/amazon-athena)
+  「[AWS Big Data Blog の Athena に関する記事](https://aws.amazon.com/blogs/big-data/tag/amazon-athena/)」 

トラブルシューティングには、エキスパート、またはヘルパーコミュニティによる反復的な照会と検出が必要になることがよくあります。このページにある提案事項を試しても問題が引き続き発生する場合は、AWS サポート に問い合わせるか (AWS マネジメントコンソール で **[Support]** (サポート)、**[Support Center]** (サポートセンター) の順に選択します)、[[Amazon Athena]](https://repost.aws/tags/TA78iVOM7gR62_QqDe2-CmiA/amazon-athena) タグを使用して **AWS re:Post** で質問してください。