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

最終更新日: 2021 年 5 月 11 日

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

簡単な説明

「HIVE_METASTORE_ERROR」エラーの種類とその原因は、次のとおりです。

  • HIVE_METASTORE_ERROR: com.facebook.presto.spi.PrestoException: Error: : expected at the position 1234 of struct but '/' is found.(Service: null; Status Code: 0; Error Code: null; Request ID: null): クエリされたテーブルの列名に特殊文字が含まれている場合、またはパーティションスキーマの列名に特殊文字が含まれている場合、このエラーが表示されます。Athena は、アンダースコア以外の特殊文字をサポートしていません。詳細については、「テーブル、データベース、および列の名前」を参照してください。
  • HIVE_METASTORE_ERROR: com.facebook.presto.spi.PrestoException: Required Table Storage Descriptor is not populated: The StorageDescriptor parameter contains information about the physical storage of the table.このエラーは、パーティションが破損しているため、テーブルの 1 つ以上のパーティションに、パーティションの場所が設定されていない場合に発生します。
  • HIVE_METASTORE_ERROR: com.facebook.presto.spi.PrestoException: java.io.IOException: Response payload size (11112222 bytes) exceeded maximum allowed payload size (6291556 bytes): このエラーは、AWS Lambda 関数を使用して、クロスアカウントの AWS Glue Data Catalog または外部の Hive メタストアに対して Athena クエリを実行した場合に発生します。Lambda の呼び出しペイロードの上限は 6 MB です。このエラーは、Lambda から返されたオブジェクトのサイズが、6 MB を超える場合に発生します。Lambda ペイロードの制限はハードリミットなので、増やすことはできません。詳細については、Lambda のクォータをご参照ください。

解決方法

HIVE_METASTORE_ERROR: com.facebook.presto.spi.PrestoException: Error: : expected at the position 1234 of struct<test_column> but '/' is found.(Service: null; Status Code: 0; Error Code: null; Request 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: Required Table Storage Descriptor is not populated

このエラーを解決するには、次の解決方法のうち 1 つ以上を選択してください。

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

HIVE_METASTORE_ERROR: com.facebook.presto.spi.PrestoException: java.io.IOException: Response payload size (11112222 bytes) exceeded maximum allowed payload size (6291556 bytes)

このエラーを解決するには、次の解決方法のうち 1 つ以上を選択してください。

  • Lambda 関数のレスポンスペイロードを、オブジェクトとして Amazon S3 バケットにアップロードします。次に、このオブジェクトを Lambda 関数の応答ペイロードとして含めます。オブジェクトの署名付き URL を生成する方法については、「署名付き URL を使用したオブジェクトの共有」を参照してください。
  • テーブルがパーティション化されていて、ユースケースで認められている場合は、特定のパーティションのみをクエリします。
  • Lambda 関数を作成するときに、Amazon S3 のスピルロケーションを指定します。しきい値よりも大きいレスポンスは、指定された S3 のロケーションに流れ込みます。

この記事は役に立ちましたか?


請求に関するサポートまたは技術サポートが必要ですか?