Wie behebe ich den Fehler „GENERIC_INTERNAL_ERROR“, wenn ich eine Tabelle in Amazon Athena abfrage?

Lesedauer: 8 Minute
0

Wenn ich meine Amazon-Athena-Tabelle abfrage, erhalte ich die Fehlermeldung „GENERIC_INTERNAL_ERROR“.

Kurzbeschreibung

Die verschiedenen Typen von GENERIC_INTERNAL_ERROR-Ausnahmen und ihre Ursachen sind die folgenden:

  • GENERIC_INTERNAL_ERROR: null: Diese Ausnahme kann unter einer der folgenden Bedingungen auftreten:
  • Es besteht eine Schemainkongruenz zwischen dem Datentyp einer Spalte in der Tabellendefinition und dem tatsächlichen Datentyp des Datensatzes.
  • Sie führen eine CREATE TABLE AS SELECT (CTAS) Abfrage mit ungenauer Syntax aus.
  • GENERIC_INTERNAL_ERROR: parent builder is null: Diese Ausnahme tritt möglicherweise auf, wenn Sie eine Tabelle mit Spalten des Datentyps Array und dem SerDE-Format OpenCSVSerDe abfragen. Das OpenCSVSerde-Format unterstützt den Array-Datentyp nicht.
  • GENERIC_INTERNAL_ERROR: Value exceeds MAX_INT: Diese Ausnahme tritt möglicherweise auf, wenn die Quelldatenspalte mit dem Datentyp INT definiert ist und einen numerischen Wert größer als 2.147.483.647 hat.
  • GENERIC_INTERNAL_ERROR: Value exceeds MAX_BYTE: Diese Ausnahme tritt möglicherweise auf, wenn die Quelldatenspalte einen numerischen Wert hat, der die zulässige Größe für den Datentyp BYTE überschreitet. Der Datentyp BYTE entspricht TINYINT. TINYINT ist eine 8-Bit-GANZZAHL mit Vorzeichen im Zweierkomplementformat mit einem Mindestwert von -128 und einem Maximalwert von 127.
  • GENERIC_INTERNAL_ERROR: Number of partition values does not match number of filters: Diese Ausnahme kann auftreten, wenn Sie inkonsistente Partitionen auf Daten von Amazon Simple Storage Service (Amazon S3) haben. Unter einer der folgenden Bedingungen können inkonsistente Partitionen auftreten:
  • Die Partitionen in Amazon S3 haben sich geändert. (Beispiel: Neue Partitionen wurden hinzugefügt).
  • Die Anzahl der Partitionsspalten in der Tabelle entspricht nicht der Anzahl der Partitionsmetadaten.
  • GENERIC_INTERNAL_ERROR: Multiple entries with same key: Möglicherweise wird diese Ausnahme aufgrund von Schlüsseln (Spalten) in den JSON-Daten angezeigt, wenn:
  • Derselbe Name wird zweimal verwendet.
  • Derselbe Name wird verwendet, wenn er ausschließlich in Kleinbuchstaben umgewandelt wird.

Behebung

GENERIC_INTERNAL_ERROR:null

Nichtübereinstimmung des Spaltendatentyps: Stellen Sie sicher, dass der Spaltendatentyp in der Tabellendefinition mit dem Spaltendatentyp in den Quelldaten kompatibel ist. Athena verwendet die Schema-on-Read-Technologie. Das bedeutet, dass Ihre Tabellendefinitionen auf Ihre Daten in Amazon S3 angewendet werden, wenn die Abfragen verarbeitet werden.

Zum Beispiel, wenn eine Tabelle in Parquet-Dateien erstellt wird:

  • Athena liest das Schema aus den Dateien
  • Dann validiert Athena das Schema anhand der Tabellendefinition, in der die Parquet-Datei abgefragt wird.

Wenn der zugrunde liegende Datentyp einer Spalte nicht mit dem Datentyp übereinstimmt, der bei der Tabellendefinition erwähnt wurde, wird der Fehler Column data type mismatch angezeigt.

Um dieses Problem zu beheben, stellen Sie sicher, dass die Quelldatendateien nicht beschädigt sind. Wenn zwischen den Quelldatendateien und der Tabellendefinition eine Schemainkongruenz besteht, gehen Sie wie folgt vor:

Wenn die Quelldatendateien beschädigt sind, löschen Sie die Dateien und fragen Sie dann die Tabelle ab.

Ungenaue Syntax: Möglicherweise wird der Fehler „GENERIC INTERNAL ERROR:null“ angezeigt, wenn die beiden folgenden Bedingungen zutreffen:

Um diesen Fehler zu vermeiden, müssen Sie unterschiedliche Spaltennamen für die Eigenschaften partitioned\ _by und bucketed\by verwenden, wenn Sie die CTAS-Abfrage verwenden. Um diesen Fehler zu beheben, erstellen Sie eine neue Tabelle, in der Sie unterschiedliche Spaltennamen für partitioned\ _by und bucketed_by verwenden.

GENERIC_INTERNAL_ERROR: parent builder is null

Um diesen Fehler zu beheben, suchen Sie die Spalte mit dem Datentyp Array und ändern Sie dann den Datentyp dieser Spalte in String. Gehen Sie wie folgt vor, um den Spaltendatentyp in String zu ändern:

Führen Sie den Befehl SHOW CREATE TABLE aus, um die Abfrage zu generieren, mit der die Tabelle erstellt wurde. Sehen Sie sich dann den Spaltendatentyp für alle Spalten in der Ausgabe dieses Befehls an. Suchen Sie die Spalte mit dem Datentyp Array und ändern Sie dann den Datentyp dieser Spalte in String.

Gehen Sie wie folgt vor, um das Schema der Tabelle mit Data Catalog zu aktualisieren:

  1. Öffnen Sie die AWS-Glue-Konsole.
  2. Wählen Sie im Navigationsbereich die Option Tabellen aus.
  3. Wählen Sie die Tabelle aus, die Sie aktualisieren möchten.
  4. Wählen Sie Aktion und dann Details ** anzeigen** aus.
  5. Wählen Sie Schema bearbeiten.
  6. Scrollen Sie zur Spalte mit dem Datentyp Array und wählen Sie dann Array aus.
  7. Wählen Sie als Spaltentyp String aus der Dropdown-Liste aus.
  8. Wählen Sie Aktualisieren aus.
  9. Wählen Sie auf der Seite Schema bearbeiten die Option Speichern aus.

GENERIC_INTERNAL_ERROR: Value exceeds MAX_INT

Um diesen Fehler zu beheben, suchen Sie die Spalte mit dem Datentyp int und aktualisieren Sie dann den Datentyp dieser Spalte von int auf bigint. Um den Spaltendatentyp zu ändern, aktualisieren Sie das Schema im Datenkatalog oder erstellen Sie eine neue Tabelle mit dem aktualisierten Schema.

Führen Sie den Befehl SHOW CREATE TABLE aus, um die Abfrage zu generieren, mit der die Tabelle erstellt wurde. Sehen Sie sich dann den Spaltendatentyp für alle Spalten in der Ausgabe dieses Befehls an. Suchen Sie die Spalte mit dem Datentyp int und ändern Sie dann den Datentyp dieser Spalte in bigint.

Gehen Sie wie folgt vor, um das Schema der Tabelle mit Data Catalog zu aktualisieren:

  1. Öffnen Sie die AWS-Glue-Konsole.
  2. Wählen Sie im Navigationsbereich die Option Tabellen aus.
  3. Wählen Sie die Tabelle aus, die Sie aktualisieren möchten.
  4. Wählen Sie Aktion und dann Details ** anzeigen** aus.
  5. Wählen Sie Schema bearbeiten aus.
  6. Scrollen Sie zur Spalte mit dem Datentyp int, und wählen Sie dann int aus.
  7. Wählen Sie als Spaltentyp bigint aus der Dropdown-Liste aus.
  8. Wählen Sie Aktualisieren aus.
  9. Wählen Sie auf der Seite Schema bearbeiten die Option Speichern aus.

GENERIC_INTERNAL_ERROR: Value exceeds MAX_BYTE

Um diesen Fehler zu beheben, suchen Sie die Spalte mit dem Datentyp tinyint. Ändern Sie dann den Datentyp dieser Spalte in smallint, int oder bigint. Sie können diesen Fehler auch beheben, indem Sie eine neue Tabelle mit dem aktualisierten Schema erstellen.

Führen Sie den Befehl SHOW CREATE TABLE aus, um die Abfrage zu generieren, mit der die Tabelle erstellt wurde. Sehen Sie sich dann den Spaltendatentyp für alle Spalten in der Ausgabe dieses Befehls an. Suchen Sie die Spalte mit dem Datentyp tinyint und ändern Sie den Datentyp dieser Spalte in smallint, bigint oder int.

Gehen Sie wie folgt vor, um das Schema der Tabelle mit Data Catalog zu aktualisieren:

  1. Öffnen Sie die AWS-Glue-Konsole.
  2. Wählen Sie im Navigationsbereich Tabellen aus.
  3. Wählen Sie die Tabelle aus, die Sie aktualisieren möchten.
  4. Wählen Sie Aktion und dann Details ** anzeigen** aus.
  5. Wählen Sie Schema bearbeiten aus.
  6. Scrollen Sie zur Spalte mit dem Datentyp tinyint und wählen Sie dann tinyint aus.
  7. Wählen Sie als Spaltentyp in der Dropdownliste smallint, bigint oder int aus.
  8. Wählen Sie Aktualisieren aus.
  9. Wählen Sie auf der Seite Schema bearbeiten die Option Speichern aus.

GENERIC_INTERNAL_ERROR: Number of partition values does not match number of filters

Gehen Sie wie folgt vor, um diesen Fehler zu beheben:

ALTER TABLE doc_example_table DROP PARTITION (date = '2014-05-14');

ALTER TABLE doc_example_table ADD PARTITION (date = '2016-05-14', country = 'IN');

GENERIC_INTERNAL_ERROR: Multiple entries with same key

Wenn Zeilen mehrere Spalten mit demselben Schlüssel haben, ist eine Vorverarbeitung der Daten erforderlich, um ein gültiges Schlüssel-Wert-Paar hinzuzufügen. Wenn nur einige der Datensätze doppelte Schlüssel haben und Sie diese Datensätze ignorieren möchten, legen Sie ignore.malformed.json als SERDEPROPERTIES in org.openx.data.jsonserde.JsonSerDe fest.

Wenn die Schlüsselnamen identisch sind, aber unterschiedlich in Groß- und Kleinschreibung (zum Beispiel: „Spalte“, „spalte“), müssen Sie Mapping verwenden. Das liegt daran, dass Hive keine Spalten unterstützt, bei denen zwischen Groß- und Kleinschreibung unterschieden wird. Dazu müssen Sie SerDe so konfigurieren, dass die Groß- und Kleinschreibung ignoriert wird.

Gehen Sie wie folgt vor:

CREATE TABLE mytable (  
  time1 string,
  time2 string)
 ROW FORMAT SERDE 'org.openx.data.jsonserde.JsonSerDe'
WITH SERDEPROPERTIES (
"case.insensitive" = "false", --tells hive to ignore key case
"mapping.time1"= "time", -- lowercase 'time' mapped into 'time1'
"mapping.time2"= "Time") -- uppercase to 'time2'

Weitere Informationen

Datentypen in Amazon Athena

Partitionierung von Daten in Athena

AWS OFFICIAL
AWS OFFICIALAktualisiert vor einem Jahr