Athena の問題をトラブルシューティングする - Amazon Athena

Athena の問題をトラブルシューティングする

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

CREATE TABLE AS SELECT (CTAS)

同時 CTAS ステートメントで重複したデータが発生する

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

HIVE_TOO_MANY_OPEN_PARTITIONS

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 パーティションの制限を回避する」を参照してください。

データファイルの問題

Athena が隠しファイルを読み取れない

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

AWS Glue クローラから除外したファイルを Athena が読み取ってしまう

Athena は、AWS Glue クローラに指定した除外パターンを認識しません。例えば、.csv.json ファイルの両方が含まれる Amazon S3 バケットがある場合、.json ファイルをクローラから除外しても、Athena は両方のファイルのグループをクエリします。これを回避するには、除外するファイルを別の場所に配置します。

HIVE_BAD_DATA: Error parsing field value

このエラーは、以下のシナリオで発生する可能性があります。

HIVE_CANNOT_OPEN_SPLIT: Hive split s3://amzn-s3-demo-bucket を開くときにエラーが発生しました

このエラーは、多数のオブジェクトを持つ Amazon S3 バケットプレフィックスをクエリするときに発生する可能性があります。詳細については、AWS ナレッジセンターで「Athena の『HIVE_CANNOT_OPEN_SPLIT: Error opening Hive split s3://amzn-s3-demo-bucket/: Slow down』というエラーの解決方法を教えてください」を参照してください。

HIVE_CURSOR_ERROR: com.amazonaws.services.s3.model.AmazonS3Exception: The specified key does not exist

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

HIVE_CURSOR_ERROR: Unexpected end of input stream

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

HIVE_FILESYSTEM_ERROR: Incorrect fileSize 1234567 for file

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

HIVE_UNKNOWN_ERROR: Unable to create input format

このエラーは、以下のような問題が原因になっている可能性があります。

  • AWS Glue クローラがデータ形式を分類できなかった

  • 特定の AWS Glue テーブル定義プロパティが空になっている

  • Athena が Amazon S3 にあるファイルのデータ形式をサポートしていない

詳細については、「AWS ナレッジセンター」の「Athena の『unable to create input format (入力形式を作成できません)』というエラーを解決する方法を教えてください」を参照、またはナレッジセンターの動画をご覧ください。

クエリ結果を保存するために提供された S3 の場所が無効になっている

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

Linux Foundation Delta Lake テーブル

Delta Lake テーブルのスキーマが同期されていません

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 でスキーマを変更した場合、最新の情報とならない可能性があります。スキーマを更新するには、次のいずれかのステップを実行します。

横串検索

ListTableMetadata の呼び出し中にタイムアウトが発生した

ListTableMetadata API の呼び出しは、データソースに多くのテーブルが存在する場合、データソースが遅い場合、またはネットワークが遅い場合にタイムアウトすることがあります。この問題のトラブルシューティングを行うには、次のステップを使用します。

  • テーブル数を確認 — テーブルが 1,000 を超える場合、テーブル数を減らしてみてください。最速の ListTableMetadata 応答を得るには、カタログあたりのテーブル数を 1000 未満にすることをお勧めします。

  • Lambda 設定を確認する — Lambda 関数の動作をモニタリングすることは非常に重要です。フェデレーレーションカタログを使用するときは、Lambda 関数の実行ログを確認してください。結果に基づいて、メモリとタイムアウトの値を調整してください。タイムアウトに関する潜在的な問題を特定するには、Lambda 設定を再確認してください。詳細については、「AWS Lambda デベロッパーガイド」の「関数タイムアウトの設定 (コンソール)」を参照してください。

  • フェデレーションデータソースのログを確認する — フェデレーションデータソースからのログとエラーメッセージを調べて、問題やエラーがないかどうかを確認します。ログからはタイムアウトの原因に関する貴重な情報を得ることができます。

  • StartQueryExecution をメタデータの取得に使用 — テーブルが 1,000 を超える場合、フェデレーションコネクタを使用してメタデータを取得するのに予想以上に時間がかかることがあります。StartQueryExecution の非同期性により、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」または個々の「Athena データソースコネクタ」のドキュメントを参照してください。

JSON データを読み込もうとしたときの NULL または不正なデータエラー

JSON データを読み込もうとしたときの NULL または不正なデータエラーには、多くの原因が考えられます。OpenX SerDe の使用時にエラーを発生させている行を特定するには、ignore.malformed.jsontrue に設定します。不正な形式のレコードが NULL として返されます。詳細については、AWS ナレッジセンターの「Amazon Athena で JSON データを読み込もうとするとエラーが発生します」を参照、またはナレッジセンターの動画をご覧ください。

HIVE_BAD_DATA: Error parsing field value for field 0: java.lang.String cannot be cast to org.openx.data.jsonserde.json.JSONObject

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

HIVE_CURSOR_ERROR: Row is not a valid JSON object - JSONException: Duplicate key

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

プリティプリントされた JSON に伴う HIVE_CURSOR_ERROR メッセージ

Hive JSON SerDe および OpenX JSON SerDe ライブラリでは、各 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」(JSON データファイル) を参照してください。

複数の JSON レコードが 1 の SELECT COUNT を返す

OpenX JSON SerDe を使用している場合は、レコードが改行文字で区切られていることを確認してください。詳細については、「AWS ナレッジセンター」の「入力 JSON ファイルに複数のレコードが含まれているにもかかわらず、Amazon Athena の SELECT COUNT クエリが 1 つのレコードのみを返す」を参照してください。

カスタム JSON 分類子を使用する AWS Glue クローラによって作成されたテーブルをクエリできない

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

MSCK REPAIR TABLE

MSCK REPAIR TABLE 関連の問題については、「MSCK REPAIR TABLE」ページの「考慮事項と制限事項」および「トラブルシューティング」セクションを参照してください。

出力の問題

Unable to verify/create output bucket

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

TIMESTAMP 結果が空になる

Athena には Java TIMESTAMP 形式が必要です。詳細については、「AWS ナレッジセンター」の「Amazon Athena のテーブルにクエリを実行すると、TIMESTAMP の結果が空になる」を参照してください。

Athena クエリ出力を CSV 以外の形式で保存する

デフォルトでは、Athena は CSV 形式でのみファイルを出力します。異なる形式で SELECT クエリの結果を出力するには、UNLOAD ステートメントを使用できます。詳細については、「UNLOAD」を参照してください。CTAS クエリで format テーブルプロパティを使用して、出力形式を設定することもできます。UNLOAD とは異なり、CTAS ではテーブルの作成が必要です。詳細については、「AWS ナレッジセンター」の「Athena クエリ出力を、CSV 以外の形式 (圧縮形式など) で保存する方法を教えてください」を参照してください。

The S3 location provided to save your query results is invalid

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

Parquet の問題

org.apache.parquet.io.GroupColumnIO cannot be cast to org.apache.parquet.io.PrimitiveColumnIO

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

Parquet 統計の問題

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 ステートメントまたは ALTER TABLE SET TBLPROPERTIES ステートメントを使用して 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」を参照してください。

パーティションの問題

MSCK REPAIR TABLE が古いパーティションを削除しない

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

MSCK REPAIR TABLE の失敗

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

MSCK REPAIR TABLE がパーティションを検出しても、それらを AWS Glue に追加しない

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

dd-MM-yyyy-HH-mm-ss または yyyy-MM-dd の日付形式でのパーティション射影範囲が機能しない

正しく動作させるには、日付形式を yyyy-MM-dd HH:00:00 にする必要があります。詳細については、Stack Overflow 記事の「Athena Partition Projection Not Working As Expected」を参照してください。

PARTITION BY が BIGINT 型をサポートしない

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

意味のあるパーティションがない

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

パーティション射影は、範囲パーティションと連動しません。

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

範囲をハイフンで指定するとパーティション投影エラーが発生します

range テーブルプロパティをカンマの代わりにハイフンで指定すると、「INVALID_TABLE_PROPERTY: For input string: "number-number"」のようなエラーが表示されます。範囲の値は、ハイフンではなくカンマで区切ってください。詳細については、「整数型」を参照してください。

HIVE_UNKNOWN_ERROR: Unable to create input format

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

HIVE_PARTITION_SCHEMA_MISMATCH

パーティションのスキーマがテーブルのスキーマと異なる場合、クエリが「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

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

ゼロバイト _$folder$ ファイル

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 […]

パーティションされたデータからレコードが返されない

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

HIVE_TOO_MANY_OPEN_PARTITIONS」も参照してください。

アクセス許可

Amazon S3 のクエリ時におけるアクセス拒否エラー

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

Amazon S3 にある暗号化されたデータでの DDL クエリの実行時に、ステータスコード: 403 でアクセスが拒否される

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

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

  2. デフォルト暗号化SSE-S3 を使用するように設定されているバケットがある。

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

    { "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 でアクセスが拒否される

このエラーは、別の 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」(別のアカウントでバケットをクエリすると、Amazon Athena で Amazon S3 例外「access denied with status code: 403」が発生する) を参照、またはナレッジセンターの動画をご覧ください。

IAM ロールの認証情報を使用して Athena JDBC ドライバーに接続する

ロールの一時的な認証情報を取得して、Athena への JDBC 接続を認証できます。一時的な認証情報の存続期間は最大 12 時間です。詳細については、「AWS ナレッジセンター」の「JDBC ドライバーを使用して Athena に接続するときに、独自の IAM ロール認証情報を使用する、または別の IAM ロールに切り替える方法を教えてください」を参照してください。

クエリ構文の問題

失敗: NullPointerException 名は null です

AWS Glue CreateTable API 操作や AWS CloudFormation AWS::Glue::Table テンプレートを使用して、TableType プロパティを指定せずに Athena で使用するテーブルを作成し、SHOW CREATE TABLE または MSCK REPAIR TABLE などの DDL クエリを実行すると、「失敗: NullPointerException 名は null です」というエラーメッセージを受け取る場合があります。

このエラーを解決するには、TableInput TableType 属性の値を AWS Glue CreateTable API コール、または AWS CloudFormation テンプレートの一部として指定します。TableType に使用できる値には、EXTERNAL_TABLEVIRTUAL_VIEW が含まれます。

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

Function not Registered

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

GENERIC_INTERNAL_ERROR の例外

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 の許容サイズを超える場合に表示される場合があります。データ型 BYTETINYINT に相当します。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』エラーを解決する方法を教えてください。」を参照してください。

Number of matching groups doesn't match the number of columns

このエラーは、CREATE TABLE ステートメントで Regex SerDe を使用しており、regex マッチンググループの数が、テーブルに指定した列の数と一致しない場合に発生します。詳細については、「AWS ナレッジセンター」の「How do I resolve the RegexSerDe error "number of matching groups doesn't match the number of columns" in amazon Athena?」(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

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

SYNTAX_ERROR: Column cannot be resolved

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

関数呼び出しの引数が多すぎます

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

TOO_MANY_ARGUMENTS: 行 nnn:nn: 関数呼び出し function_name() の引数が多すぎます

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

クエリタイムアウトの問題

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

ListTableMetadata API を呼び出す際のフェデレーションクエリのタイムアウトの問題については、「ListTableMetadata の呼び出し中にタイムアウトが発生した」を参照してください。

スロットリングの問題

クエリが 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

TooManyRequestsException

Amazon S3 AmazonS3Exception: Please reduce your request rate.

Athena を使用するときに Amazon S3 のスロットリングを防ぐ方法については、「Amazon S3 のスロットリングを防ぐ」を参照してください。

ビュー

Apache Hive シェルで作成されたビューが Athena で機能しない

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

View is stale; it must be re-created

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

ワークグループ

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

追加リソース

以下のページには、Amazon Athena での問題のトラブルシューティングに関する追加の情報が記載されています。

以下の AWS リソースも役に立ちます。

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