Wie kann ich den Fehler „HIVE_METASTORE_ERROR“ beheben, wenn ich eine Tabelle in Amazon Athena abfrage?

Lesedauer: 3 Minute
0

Ich erhalte die Fehlermeldung „HIVE_METASTORE_ERROR“, wenn ich meine Amazon Athena-Tabelle abfrage.

Kurzbeschreibung

Sehen Sie sich die folgenden Arten von „HIVE_METASTORE_ERROR“-Fehlern und deren Ursachen an:

  • HIVE_METASTORE_ERROR: com.facebook.presto.spi.PrestoException: Fehler: : an Position 1234 von struct<test_column> erwartet, aber „/“ wurde gefunden. (Service: null; Statuscode: 0; Fehlercode: null; Anforderungs-ID: null): Ein Spaltenname in der abgefragten Tabelle enthält ein Sonderzeichen, oder ein Spaltenname im Partitionsschema enthält ein Sonderzeichen. Athena unterstützt keine Sonderzeichen außer Unterstrichen. Weitere Informationen finden Sie unter Namen für Tabellen, Datenbanken und Spalten.
  • HIVE_METASTORE_ERROR: com.facebook.presto.spi.PrestoException: Erforderlicher Tabellenspeicher-Deskriptor ist nicht ausgefüllt:
    Der Parameter StorageDescriptor enthält Informationen über den physischen Speicher der Tabelle. Dieser Fehler wird angezeigt, wenn für eine oder mehrere Partitionen in der Tabelle der Speicherort der Partition aufgrund beschädigter Partitionen nicht festgelegt ist.
  • **HIVE_METASTORE_ERROR: com.facebook.presto.spi.PrestoException: java.io.IOException: Die Größe der Antwort-Nutzlast (11112222 Byte) hat die maximal zulässige Nutzlastgröße (6291556 Byte) überschritten:**Sie verwenden eine AWS Lambda-Funktion, um Athena-Abfragen für einen kontoübergreifenden AWS Glue-Datenkatalog oder einen externen Hive-Metastore auszuführen. Für Lambda gilt jedoch ein Payload-Limit für Aufrufe von 6 MB. Dieser Fehler wird angezeigt, wenn die Größe des von Lambda zurückgegebenen Objekts mehr als 6 MB beträgt. Das Lambda-Payload-Limit ist ein festes Limit und kann nicht erhöht werden. Weitere Informationen finden Sie unter Lambda-Kontingente.

Behebung

HIVE_METASTORE_ERROR: com.facebook.presto.spi.PrestoException: Fehler: : an Position 1234 von struct<test_column> erwartet, aber „/“ wurde gefunden. (Service: null; Statuscode: 0; Fehlercode: null; Anforderungs-ID: null)

Führen Sie die folgenden Schritte aus, um diesen Fehler zu beheben:

  • Um das Sonderzeichen im Spaltennamen durch einen Unterstrich zu ersetzen, führen Sie das folgende benutzerdefinierte Skript für Ihre Daten aus:
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: Erforderlicher Tabellenspeicher-Deskriptor ist nicht ausgefüllt

Um diesen Fehler zu beheben, wählen Sie eine oder mehrere der folgenden Lösungen:

  • Wenn Ihre Tabelle bereits partitioniert ist und die Daten im Hive-Partitionsformat von Amazon Simple Storage Service (Amazon S3) geladen wurden, laden Sie die Partitionen. Führen Sie einen Befehl aus, der dem folgenden Beispiel ähnelt:
    **Hinweis:**Achten Sie darauf, doc_example_table durch den Namen Ihrer Tabelle zu ersetzen.
MSCK REPAIR TABLE doc_example_table
  • Wenn der MSCK REPAIR TABLE-Befehl das Problem nicht behebt, löschen Sie die Tabelle und erstellen Sie eine neue Tabelle mit derselben Definition. Führen Sie dann den MSCK REPAIR TABLE-Befehl für die neue Tabelle aus.
  • Erstellen Sie einen separaten Ordner im Amazon S3-Bucket und verschieben Sie dann die Datendateien, die Sie abfragen möchten, in diesen Ordner. Erstellen Sie einen AWS Glue-Crawler, der auf diesen Ordner statt auf den Bucket verweist.

HIVE_METASTORE_ERROR: com.facebook.presto.spi.PrestoException: java.io.IOException: Die Größe der Antwort-Nutzlast (11112222 Byte) hat die maximal zulässige Nutzlastgröße (6291556 Byte) überschritten

Um diesen Fehler zu beheben, wählen Sie eine oder mehrere der folgenden Lösungen:

  • Laden Sie die Antwort-Payload der Lambda-Funktion als Objekt in einen Amazon S3-Bucket hoch. Fügen Sie dann dieses Objekt als Payload in die Antwort der Lambda-Funktion ein. Informationen zum Generieren einer vorsignierten URL für Ihr Objekt finden Sie unter Freigeben von Objekten mithilfe vorsignierter URLs.
  • Wenn Ihre Tabelle partitioniert ist und Ihr Anwendungsfall dies zulässt, fragen Sie nur die spezifische Partition ab.
  • Geben Sie beim Erstellen der Lambda-Funktion den Speicherort des Überlaufs in Amazon S3 an. Antworten, die den Schwellenwert überschreiten, werden an den angegebenen S3-Speicherort übertragen.

Verwandte Informationen

Problembehandlung in Athena

AWS OFFICIAL
AWS OFFICIALAktualisiert vor einem Jahr