Wie kann ich den Fehler „HIVE_METASTORE_ERROR“ beheben, wenn ich eine Tabelle in Amazon Athena abfrage?
Ich erhalte die Fehlermeldung „HIVE_METASTORE_ERROR“, wenn ich meine Amazon Athena-Tabelle abfrage.
Lösung
Die folgenden Typen von „HIVE\ _METASTORE\ _ERROR“-Fehlern enthalten Informationen zur Ursache und Behebung.
**Hinweis:**Wenn bei der Ausführung von AWS Command Line Interface (AWS CLI)-Befehlen Fehler auftreten, finden Sie weitere Informationen unter Problembehebung bei AWS CLI-Fehlern. Stellen Sie außerdem sicher, dass Sie die neueste Version von AWS CLI verwenden.
"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)"
-oder-
"HIVE_METASTORE_ERROR: com.amazonaws.services.datacatalog.model.InvalidInputException: Error: : expected at the position 11884 of ... but '#' is found"
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.
Um diesen Fehler zu beheben, müssen Sie das Sonderzeichen im Spaltennamen durch einen Unterstrich ersetzen. Bearbeiten Sie dann das vorhandene Schema der Tabelle.
Das folgende Beispiel für eine AWS Glue-Tabelle enthält eine Datendatei mit dem Namen „a.txt“ mit dem Sonderzeichen „/“:
col/1,col_2,col/3 data1,data2,data3 data4,data5,data6
-
Um das Sonderzeichen „/“ durch einen Unterstrich „_“ zu ersetzen, führen Sie das folgende Skript aus:
string = open('a.txt').readlines() string[0] = string[0].replace('/', '_') open('b.txt', 'w').write(string)
Beispielausgabe mit einer neuen Datendatei „b.txt“:
col_1,col_2,col_3 data1,data2,data3 data4,data5,data6
-
Bearbeiten Sie das vorhandene Schema der Tabelle in der AWS Glue-Konsole und ersetzen Sie dann „/“ durch ein anderes von Athena unterstütztes Zeichen.
"HIVE_METASTORE_ERROR: com.facebook.presto.spi.PrestoException: Required Table Storage Descriptor is not populated"
-oder-
"HIVE_METASTORE_ERROR: Table is missing storage descriptor"
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.
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: Response payload size (11112222 bytes) exceeded maximum allowed payload size (6291556 bytes)"
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.
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.
"HIVE_METASTORE_ERROR: Failed to fetch partitions from Glue Data Catalog"
Dieser Fehler tritt aus den folgenden Gründen auf:
- Der in den Partitionsmetadaten enthaltene Spaltenname enthält andere Sonderzeichen als einen Unterstrich. Weitere Informationen finden Sie unter Namen für Tabellen, Datenbanken und Spalten.
- Die SerDe-Information fehlt im StorageDescriptor, der in den Partitionsmetadaten definiert ist.
Gehen Sie wie folgt vor, um die Partition mit dem Problem zu identifizieren:
- Überprüfen Sie den AWS CloudTrail-Ereignisverlauf auf die API-Aufrufe CreatePartition und BatchCreatePartition nach der letzten erfolgreich ausgeführten Abfrage.
- Führen Sie den AWS-CLI-Befehl get-partitions in Ihrer Glue-Tabelle aus, um die Partitionsinformationen aus dem AWS Glue-Katalog abzurufen.
Um das Partitionsproblem zu lösen, führen Sie die DDL-Anweisung ALTER TABLE DROP PARTITION aus, um die Partition zu löschen. Führen Sie dann einen der folgenden Schritte aus:
- Führen Sie den AWS CLI-Befehl create-partition aus, um die Partition neu zu erstellen.
- Erstellen Sie einen Glue-Crawler für den Amazon S3-Standort der Tabellen. Stellen Sie sicher, dass Sie die Crawler-Konfigurationsoption so einstellen, dass alle neuen und vorhandenen Partitionen mit Metadaten aus der Tabelle aktualisiert werden.
Ähnliche Informationen

Relevanter Inhalt
- AWS OFFICIALAktualisiert vor 2 Jahren
- AWS OFFICIALAktualisiert vor einem Jahr
- AWS OFFICIALAktualisiert vor 5 Monaten