Direkt zum Inhalt

Wie behebe ich den Fehler "GENERIC_INTERNAL_ERROR", wenn ich eine Tabelle in Athena abfrage?

Lesedauer: 6 Minute
0

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

Lösung

"GENERIC_INTERNAL_ERROR: null"

Nichtübereinstimmung des Spaltendatentyps

Stelle sicher, dass der Spaltendatentyp in der Tabellendefinition mit dem Spaltendatentyp in den Quelldaten kompatibel ist. Athena verwendet die Schema-on-Read-Technologie. Wenn Athena die Abfragen verarbeitet, wendet es deine Tabellendefinitionen auf deine Daten in Amazon Simple Storage Service (Amazon S3) an.

Wenn du beispielsweise eine Tabelle in einer Apache Parquet-Datei erstellst, liest Athena das Schema aus der Datei. Dann validiert Athena das Schema anhand der Tabellendefinition, in der du das Parquet abfragst. Wenn der Datentyp einer Spalte nicht mit dem Datentyp der Tabellendefinition übereinstimmt, erhältst du die Fehlermeldung "Column data type mismatch".

Wenn zwischen den Quelldatendateien und der Tabellendefinition ein Schemakonflikt besteht, führe eine der folgenden Aktionen aus:

Überprüfe außerdem, ob die Quelldatendateien beschädigt sind. Wenn du beschädigte Quelldatendateien findest, lösche die Dateien und frage die Tabelle ab.

Ungenaue Syntax

Möglicherweise wird der Fehler "GENERIC INTERNAL ERROR: null" angezeigt, wenn beide der folgenden Bedingungen zutreffen:

Wenn du die CTAS-Abfrage verwendest, musst du unterschiedliche Spaltennamen für die Eigenschaften partitioned_by und bucketed_by verwenden. Um dieses Problem zu beheben, erstelle eine neue Tabelle und wähle andere Spaltennamen für partitioned_by und bucketed_by aus.

"GENERIC_INTERNAL_ERROR: parent builder is null"

Dieser Fehler wird möglicherweise angezeigt, wenn du eine Tabelle abfragst, die array-Spalten und das OpenCSVSerDE-Format enthält. Das OpenCSVSerde-Format unterstützt den array-Datentyp nicht.

Um dieses Problem zu beheben, ändere die Spalte mit dem array-Datentyp in string. Du kannst entweder die AWS Glue-Konsole verwenden oder einen Befehl ausführen, um den Datentyp der Spalte zu ändern. Oder erstelle eine neue Tabelle.

Datentyp der Spalte ändern

Gehe wie folgt vor, um die AWS Glue-Konsole zu verwenden:

  1. Öffne 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ähle Schema bearbeiten aus.
  6. Suche die Spalte mit dem Datentyp array und wähle dann array aus.
  7. Wähle als Spaltentyp string aus der Dropdown-Liste aus.
  8. Wähle Aktualisieren aus.
  9. Wähle auf der Seite Schema bearbeiten die Option Speichern aus.

-oder-

Führe den Befehl SHOW CREATE TABLE aus, um die Abfrage zu generieren, mit der die Tabelle erstellt wurde. Suche die Spalte mit dem array-Datentyp und ändere dann den Datentyp in string.

Neue Tabelle erstellen

Erstelle eine neue Tabelle und wähle string für den Spaltendatentyp aus.

"GENERIC_INTERNAL_ERROR: Value exceeds MAX_INT"

Dieser Fehler wird möglicherweise angezeigt, wenn eine Zelle in einer INT-Quellspalte einen numerischen Wert hat, der größer als 2 147 483 647 ist.

Um dieses Problem zu beheben, ändere die Spalte mit dem Datentyp int in bigint. Du kannst entweder die AWS Glue-Konsole verwenden oder einen Befehl ausführen, um den Datentyp der Spalte zu ändern. Oder erstelle eine neue Tabelle.

Datentyp der Spalte ändern

Gehe wie folgt vor, um die AWS Glue-Konsole zu verwenden:

  1. Öffne 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ähle Schema bearbeiten aus.
  6. Suche die Spalte mit dem Datentyp int und wähle dann int aus.
  7. Wähle als Spaltentyp bigint aus der Dropdown-Liste aus.
  8. Wähle Aktualisieren aus.
  9. Wähle auf der Seite Schema bearbeiten die Option Speichern aus.

-oder-

Führe den Befehl SHOW CREATE TABLE aus, um die Abfrage zu generieren, mit der die Tabelle erstellt wurde. Suche die Spalte mit dem int-Datentyp und ändere dann den Datentyp in bigint.

Neue Tabelle erstellen

Erstelle eine neue Tabelle und wähle bigint für den Spaltendatentyp aus.

"GENERIC_INTERNAL_ERROR: Value exceeds MAX_BYTE"

Dieser Fehler wird möglicherweise angezeigt, wenn eine Zelle in einer TINYINT-Quellspalte einen ungültigen numerischen Wert hat. Der Mindestwert einer TINYINT-Spalte ist –128 und ihr Höchstwert ist 127.

Um dieses Problem zu beheben, ändere die Spalte mit dem Datentyp tinyint in smallint, int oder bigint. Du kannst entweder die AWS Glue-Konsole verwenden oder einen Befehl ausführen, um den Datentyp der Spalte zu ändern. Oder erstelle eine neue Tabelle.

Datentyp der Spalte ändern

Gehe wie folgt vor, um die AWS Glue-Konsole zu verwenden:

  1. Öffne 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ähle Schema bearbeiten aus.
  6. Suche die Spalte mit dem Datentyp tinyint und wähle dann tinyinit aus.
  7. Wähle als Spaltentyp in der Dropdownliste smallint, bigint oder int aus.
  8. Wähle Aktualisieren aus.
  9. Wähle auf der Seite Schema bearbeiten die Option Speichern aus.

-oder-

Führe den Befehl SHOW CREATE TABLE aus, um die Abfrage zu generieren, mit der die Tabelle erstellt wurde. Suche die Spalte mit dem Datentyp tinyint und ändere dann den Datentyp in smallint, bigint oder int.

Neue Tabelle erstellen

Erstelle eine neue Tabelle und wähle smallint, bigint oder int für den Spaltendatentyp aus.

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

Dieser Fehler kann auftreten, wenn du inkonsistente Partitionen in Amazon S3-Daten hast, und zwar aus einem der folgenden Gründe:

  • Du hast deine S3-Partitionen geändert. Du hast beispielsweise neue Partitionen hinzugefügt.
  • Die Anzahl der Partitionsspalten in der Tabelle entspricht nicht der Anzahl der Partitionsspalten in den Partitionsmetadaten.

Um dieses Problem zu lösen, kannst du einen AWS Glue-Crawler so konfigurieren, dass er eine neue Tabelle erstellt. Oder verwende die Anweisung ALTER TABLE DROP PARTITION, um die Partitionen zu löschen. Verwende dann die Anweisung ALTER TABLE ADD PARTITION, um dieselbe Anzahl von Partitionen wie in der Tabellendefinition hinzuzufügen.

Beispielsweise hast du in der Tabellendefinition Partitionsspalten mit den Namen Datum und Land und eine Partition, die nur eine Spalte mit dem Namen Datum enthält. Lösche die Partition mit der Spalte Datum und füge dann die Partitionen Datum und Land zur Tabelle hinzu.

Beispielbefehle:

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 du Spalten mit demselben Namen hast, musst du die Daten so vorverarbeiten, dass sie ein gültiges Schlüssel-Wert-Paar enthalten. Um Spalten mit demselben Namen zu ignorieren, setze ignore.malformed.json in org.openx.data.jsonserde.JsonSerDe auf SERDEPROPERTIES.

Apache Hive unterstützt keine Spalten, bei denen zwischen Groß- und Kleinschreibung unterschieden wird. Beispielsweise kann ein Problem auftreten, wenn du zwei Spalten mit den Namen Spalte und spalte hast.

Wenn die Spaltennamen identisch sind, jedoch unterschiedliche Groß-/Kleinschreibung aufweisen, musst du eine Zuordnung verwenden und JSON SerDe so konfigurieren, dass die Groß-/Kleinschreibung nicht berücksichtigt wird.

Beispielbefehl:

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'

Ähnliche Informationen

Datentypen in Amazon Athena

Daten partitionieren

AWS OFFICIALAktualisiert vor 5 Monaten