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

テーブルエラーをトラブルシューティングする

このセクションの情報を使用して、Athena for Spark テーブルエラーのトラブルシューティングを行います。

テーブルの作成時にパスエラーを作成できない

エラーメッセージ:「IllegalArgumentException: Cannot create a path from an empty string.」(IllegalArgumentException: 空の文字列からパスを作成することはできません)

原因: このエラーは、Athena の Apache Spark を使用してデータベースにテーブルを作成したときに、AWS Glue データベースのプロパティが空の LOCATION である場合に発生する可能性があります。

推奨される解決策: 詳細と解決策については、「テーブル作成時の不正な引数の例外」を参照してください。

AWS Glue テーブルをクエリする場合の AccessDeniedException

エラーメッセージ:「pyspark.sql.utils.AnalysisException: Unable to verify existence of default database: com.amazonaws.services.glue.model.AccessDeniedException: User: arn:aws:sts::aws-account-id:assumed-role/AWSAthenaSparkExecutionRole-unique-identifier/AthenaExecutor-unique-identifier is not authorized to perform: glue:GetDatabase on resource: arn:aws:glue:aws-region:aws-account-id:catalog because no identity-based policy allows the glue:GetDatabase action (Service: AWSGlue; Status Code: 400; Error Code: AccessDeniedException; Request ID: request-id; Proxy: null)」(pyspark.sql.utils.AnalysisException: 次のデフォルトデータベースの存在を確認できません: com.amazonaws.services.glue.model.AccessDeniedException: ユーザー: arn:aws:sts::aws-account-id:assumed-role/AWSAthenaSparkExecutionRole-unique-identifier/AthenaExecutor-unique-identifier は実行を許可されていません: リソース上の glue:GetDatabase: arn:aws:glue:aws-region:aws-account-id:catalog ID ベースのポリシーでは glue:GetDatabase アクションが許可されていないため (サービス: AWSGlue、ステータスコード: 400、エラーコード: AccessDeniedException、リクエスト ID: request-id、プロキシ: null))

原因: Spark 対応ワークグループの実行ロールに、AWS Glue リソースにアクセスする許可がありません。

推奨される解決策: この問題を解決するには、実行ロールに AWS Glue リソースへのアクセスを許可し、Amazon S3 バケットポリシーを編集して実行ロールへのアクセスを許可します。

以下の手順では、これらのステップがさらに詳しく説明されています。

実行ロールに AWS Glue リソースへのアクセス権を付与するには
  1. https://console.aws.amazon.com/athena/ で Athena コンソールを開きます。

  2. コンソールのナビゲーションペインが表示されない場合は、左側の展開メニューをクリックします。

    展開メニューを選択します。
  3. Athena コンソールのナビゲーションペインで、[Workgroups] (ワークグループ) をクリックします。

  4. [Workgroups] (ワークグループ) ページで、表示するワークグループのリンクを選択します。

  5. ワークグループの [Overview Details] (概要詳細) ページで、[Role ARN] (ロール ARN) リンクを選択します。このリンクは、IAM コンソールで Spark 実行ロールを開きます。

  6. [Permissions policies] (アクセス許可ポリシー) セクションで、リンクされたロールポリシー名を選択します。

  7. [Edit policy] (ポリシーの編集)、[JSON] の順に選択します。

  8. ロールに AWS Glue アクセス許可を追加します。通常は、glue:GetDatabase および glue:GetTable アクションに対してアクセス許可を追加します。IAM ロールの設定の詳細については、IAM ユーザーガイドの「IAM ID アクセス許可の追加と削除」を参照してください。

  9. [ポリシーの確認] を選択し、[変更の保存] を選択します。

  10. Amazon S3 バケットポリシーを編集して、実行ロールへのアクセスを許可します。ロールには、バケットおよびバケット内のオブジェクトの両方へのアクセスを許可する必要があることに注意してください。手順については、Amazon Simple Storage Service ユーザーガイドの「Amazon S3 コンソールを使用してバケットポリシーを追加する」を参照してください。