Wie behebe ich die Ausnahme „HIVE_CURSOR_ERROR“, wenn ich eine Tabelle in Amazon Athena abfrage?

Lesedauer: 3 Minute
0

Wenn ich Abfragen in meiner Amazon Athena-Tabelle ausführe, erhalte ich eine „HIVE_CURSOR_ERROR“ -Ausnahme.

Behebung

Diese Ausnahme kann unter einer der folgenden Bedingungen auftreten:

  • Die Datenobjekte an Ihrem Tabellenspeicherort sind beschädigt, nicht gültig oder falsch komprimiert.
  • Die Datensätze in den Tabellendaten sind nicht gültig (Beispiel: ein falsch formatierter JSON-Datensatz).

Häufige HIVE\ _CURSOR\ _ERROR Ausnahmen

Möglicherweise erhalten Sie eine der folgenden HIVE\ _CURSOR\ _ERROR-Ausnahmen, wenn ein Problem mit den zugrunde liegenden Objekten auftritt:

  • HIVE\ _CURSOR\ _ERROR: falsche Header-Prüfung
  • HIVE\ _CURSOR\ _ERROR: Ungültiger Blocktyp
  • HIVE\ _CURSOR\ _ERROR: falsche Datenprüfung
  • HIVE\ _CURSOR\ _FEHLER: Unerwartetes Ende des Eingabestreams
  • HIVE\ _CURSOR\ _ERROR: Ungültige gespeicherte Blocklängen
  • HIVE\ _CURSOR\ _ERROR: Ungültiger Entfernungscode

Wenn Sie kürzlich neue Objekte zu Ihrem Amazon Simple Storage Service (Amazon S3) -Tabellenspeicherort hinzugefügt haben, stellen Sie sicher, dass diese Objekte gültig und nicht beschädigt sind. Laden Sie die Objekte herunter und überprüfen Sie sie dann mit einem geeigneten Tool. Dekomprimieren Sie beispielsweise die mit GZIP komprimierten Objekte, um zu überprüfen, ob die Komprimierung gültig ist.

Wenn Ihre Tabelle partitioniert ist, überprüfen Sie, ob Sie einzelne Partitionen abfragen können. Wenn die Tabelle neue Partitionen enthält, enthalten sie möglicherweise Objekte, die nicht gültig sind.

Spezifische HIVE\ _CURSOR\ _ERROR-Ausnahmen

HIVE_CURSOR_ERROR: Row ist kein gültiges JSON-Objekt

Dieser Fehler wird angezeigt, wenn eine Zeile in der Tabelle kein gültiger JSON-Datensatz ist.

Gehen Sie wie folgt vor, um dieses Problem zu beheben:

  1. Erstellen Sie die Tabelle neu, indem Sie die Eigenschaft ** 'ignore.malformed.json' = 'true'** hinzufügen.
  2. Fragen Sie die neue Tabelle ab, um die Dateien mit fehlerhaften Datensätzen zu identifizieren, indem Sie einen Befehl ausführen, der dem folgenden ähnelt:
SELECT "$path" FROM example_table WHERE example_column = NULL

Weitere Informationen finden Sie unter Beheben von JSON-Fehler in den JSON-SerDE-Optionen von Amazon Athena und OpenX.

HIVE_CURSOR_ERROR: Beschädigter unkomprimierter Block

Dieser Fehler wird angezeigt, wenn die Objekte an Ihrem Tabellenspeicherort im LZO-Format komprimiert wurden.

Um diesen Fehler bei LZO-komprimierten Daten zu vermeiden, erstellen Sie die Tabelle mit dem INPUTFORMAT „com.hadoop.mapred.deprecatedLzoTextInputFormat“ neu. Zum Beispiel:

CREATE EXTERNAL TABLE example_table (
    example_column_1 STRING,
    example_column_2 STRING
)
STORED AS INPUTFORMAT 'com.hadoop.mapred.DeprecatedLzoTextInputFormat'
OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'
LOCATION 's3://example_bucket/example_prefix/'

Sie können diesen Fehler auch beheben, indem Sie ein anderes Komprimierungsformat verwenden.

HIVE_CURSOR_ERROR: Der Wert bei 0 in Block 0 in der Datei kann nicht gelesen werden

Dieser Fehler wird angezeigt, wenn der S3-Pfad ungültige Parquet-Objekte enthält. Prüfen Sie, ob Ihre Parquet-Objekte DECIMAL-Datentypen enthalten. Wenn Parquet-Objekte DECIMAL-Datentypen enthalten und mit Spark geschrieben wurden, sind sie möglicherweise nicht mit Hive kompatibel. Um diesen Zustand zu überprüfen, versuchen Sie, die Parquet-Objekte aus einem Spark-Job zu lesen.

Wenn Sie die Parquet-Objekte mit dem Spark-Job lesen können, schreiben Sie die Parquet-Objekte im Legacy-Modus in Spark mit der folgenden Konfiguration neu:

spark.sql.parquet.writeLegacyFormat = true

Informationen zu den Spark-Konfigurationsoptionen für Parquet finden Sie im Handbuch Konfiguration im Spark-SQL-Handbuch.

HIVE\ _CURSOR\ _ERROR: org.apache.hadoop.io.ArrayWritable kann nicht in org.apache.hadoop.io.Text umgewandelt werden

Sie erhalten diesen Fehler, wenn Sie bei der Tabellendefinition ein falsches SerDe verwendet haben. Beispielsweise könnte die Tabelle ein JSON-SerDe verwenden und die Quelldaten enthalten Parquet-Objekte.

Um diesen Fehler zu beheben, überprüfen Sie die Quelldaten und stellen Sie sicher, dass das richtige SerDe verwendet wird. Weitere Informationen finden Sie unter Unterstützte SerDes und Datenformate.


Ähnliche Informationen

Wie löse ich „HIVE\ _CURSOR\ _ERROR“: Row ist kein gültiges JSON-Objekt - JsonException: Doppelter Schlüssel beim Lesen von Dateien aus AWS Config in Athena?

Problembehandlung in Athena

AWS OFFICIAL
AWS OFFICIALAktualisiert vor 3 Jahren