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
このエラーは、以下のシナリオで発生する可能性があります。
-
テーブルで定義されているデータ型がソースデータと一致しない、または単一のフィールドに異なるデータ型が含まれている。解決案については、「AWS ナレッジセンター」の「My Amazon Athena query fails with the error "HIVE_BAD_DATA: Error parsing field value for field x: For input string: "12312845691""
」(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: ""」(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 を開くときにエラーが発生しました
このエラーは、多数のオブジェクトを持つ 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 でスキーマを変更した場合、最新の情報とならない可能性があります。スキーマを更新するには、次のいずれかのステップを実行します。
-
AWS Glue で AWS Glue クローラーを実行します。
-
Athena の ALTER TABLE ADD COLUMNS ステートメントを使用するか、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
JSON 関連のエラー
JSON データを読み込もうとしたときの NULL または不正なデータエラー
JSON データを読み込もうとしたときの NULL または不正なデータエラーには、多くの原因が考えられます。OpenX SerDe の使用時にエラーを発生させている行を特定するには、ignore.malformed.json
を true
に設定します。不正な形式のレコードが 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
として定義したが、基盤となるデータが実際には string
、int
、またはその他のプリミティブ型であるという場合に発生する可能性があります。
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 レコードが 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?
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 の場所を誤って指定すると、形式
のゼロバイトプレースホルダーが Amazon S3 に作成されます。これらのファイルは手動で削除する必要があります。partition_value
_$folder$
これが起こらないようにするには、次のように、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
Amazon S3 にある暗号化されたデータでの DDL クエリの実行時に、ステータスコード: 403 でアクセスが拒否される
「Access Denied (Service: Amazon S3; Status Code: 403; Error Code: AccessDenied; Request ID:
」というエラーメッセージは、以下の状況が当てはまる場合に表示されることがあります。<request_id>
)
-
ALTER TABLE ADD PARTITION
またはMSCK REPAIR TABLE
のような DDL クエリを実行した。 -
デフォルト暗号化が
SSE-S3
を使用するように設定されているバケットがある。 -
また、そのバケットに、
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
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_TABLE
や VIRTUAL_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
の許容サイズを超える場合に表示される場合があります。データ型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』エラーを解決する方法を教えてください。
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?
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 |
|
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?
ワークグループ
ワークグループの問題のトラブルシューティングについては、「ワークグループエラーのトラブルシューティング」(ワークグループのトラブルシューティング) を参照してください。
追加リソース
以下のページには、Amazon Athena での問題のトラブルシューティングに関する追加の情報が記載されています。
以下の AWS リソースも役に立ちます。
トラブルシューティングには、エキスパート、またはヘルパーコミュニティによる反復的な照会と検出が必要になることがよくあります。このページにある提案事項を試しても問題が引き続き発生する場合は、AWS Support に問い合わせるか (AWS Management Console で [Support] (サポート)、[Support Center] (サポートセンター) の順に選択します)、[Amazon Athena]