Amazon Athena のテーブルにクエリを実行したときの「HIVE_METASTORE_ERROR」エラーはどのように解決すればよいですか?

所要時間2分
0

Amazon Athena のテーブルにクエリを実行すると、「HIVE_METASTORE_ERROR」というエラーが表示されます。

簡単な説明

次の種類の「HIVE_METASTORE_ERROR」エラーとその原因を参照してください:

  • HIVE_METASTORE_ERROR: com.facebook.presto.spi.PrestoException: エラー : : struct<test_column> の 1234 番目の位置で期待されましたが、 '/' が見つかりました。(サービス : null; ステータスコード : 0; エラーコード : null; リクエスト ID: null): クエリされたテーブルの列名に特殊文字が含まれているか、パーティションスキーマの列名に特殊文字が含まれています。Athena はアンダースコア以外の特殊文字をサポートしていません。詳細については、「テーブル、データベース、カラムの名称について」を参照してください。
  • HIVE_METASTORE_ERROR: com.facebook.presto.spi.PrestoException: 必須テーブルStorage Descriptorが入力されていません。
    StorageDescriptor パラメータには、テーブルの物理ストレージに関する情報が含まれています。このエラーは、パーティションが破損しているためにテーブル上の 1 つ以上のパーティションに、パーティションの場所が設定されていない場合に発生します。
  • HIVE_METASTORE_ERROR: com.facebook.presto.spi.PrestoException: java.io.IOException: レスポンスのペイロードサイズ (11112222バイト) が最大許容ペイロードサイズ (6291556バイト) を超えています。 AWS Lambda 関数を使用して、クロスアカウントの AWS Glue データカタログまたは外部の Hive メタストアに対して Athena クエリを実行します。ただし、Lambda の呼び出しペイロード制限は 6 MB です。このエラーは、Lambda から返されるオブジェクトのサイズが 6 MB を超える場合に発生します。Lambda のペイロード制限はハードリミットであり、増やすことはできません。詳細については、「Lambda quotas」を参照してください。

解決方法

HIVE_METASTORE_ERROR: com.facebook.presto.spi.PrestoException: エラー : : struct<test_column> の 1234 番目の位置で期待されましたが、 '/' が見つかりました。(サービス : null; ステータスコード : 0; エラーコード : null; リクエスト ID: null)

このエラーを解決するには、次の手順を実行してください:

  • 列名の特殊文字をアンダースコアに置き換えるために、データに対して次のカスタムスクリプトを実行します:
import re
string = open('a.txt').read()
new_str = re.sub('/', '_', string)
open('b.txt', 'w').write(new_str)

HIVE_METASTORE_ERROR: com.facebook.presto.spi.PrestoException: 必須テーブルStorage Descriptorが入力されていません

このエラーを解決するには、以下の 1 つ以上の解決策を実行してください:

  • テーブルが既にパーティション化されていて、データが Amazon Simple Storage Service (Amazon S3) Hive パーティション形式でロードされている場合は、パーティションをロードします。次の例のようなコマンドを実行します:
    注: doc_example_table は必ずテーブルの名前に置き換えてください。
MSCK REPAIR TABLE doc_example_table
  • MSCK REPAIR TABLE コマンドを実行しても問題が解決しない場合は、テーブルを削除して同じ定義で新しいテーブルを作成してください。次に、新しいテーブルで MSCK REPAIR TABLE コマンドを実行します。
  • Amazon S3 バケットに別のフォルダを作成し、クエリするデータファイルをそのフォルダに移動します。バケットではなくそのフォルダを指す AWS Glue クローラーを作成します。

HIVE_METASTORE_ERROR: com.facebook.presto.spi.PrestoException: java.io.IOException: レスポンスのペイロードサイズ (11112222バイト) が最大許容ペイロードサイズ (6291556バイト) を超えています。

このエラーを解決するには、以下の 1 つ以上の解決策を実行してください:

  • Lambda 関数のレスポンスペイロードをオブジェクトとして Amazon S3 バケットにアップロードします。次に、このオブジェクトをペイロードとして Lambda 関数のレスポンスに含めます。オブジェクトの署名付き URL の生成については、「署名付 URL でオブジェクトを共有する」を参照してください。
  • テーブルがパーティション化されていて、ユースケースで可能な場合は、特定のパーティションのみに対してクエリを実行してください。
  • Lambda 関数を作成する際に、Amazon S3 でスピルの場所を指定します。しきい値を超えるレスポンスは、指定した S3 の場所にスピルします。

関連情報

Athena でのトラブルシューティング

AWS公式
AWS公式更新しました 1年前