Direkt zum Inhalt

Wie kann ich Zeitstempel-Ausnahmen lösen, wenn ich eine Tabelle in Athena abfrage?

Lesedauer: 3 Minute
0

Wenn ich eine Spalte mit TIMESTAMP-Daten in meiner Amazon Athena-Tabelle abfrage, erhalte ich eine Ausnahme.

Kurzbeschreibung

Wenn du eine Athena-Tabelle mit TIMESTAMP-Daten abfragen, schlägt die Abfrage möglicherweise mit einer der folgenden Ausnahmen fehl:

  • "TYPE_MISMATCH: line 1:49: Cannot apply operator: timestamp(3) < varchar(19)": Diese Ausnahme kann auftreten, wenn du in deiner Abfrage einen logischen Operator wie '>' zwischen den Werten TIMESTAMP und STRING verwendet hast.
  • "cast(col as timestamp) with INVALID_CAST_ARGUMENT": Wenn du CAST für eine Spalte mit einem Datentyp verwendest, den Athena nicht unterstützt, tritt möglicherweise diese Ausnahme auf.

Lösung

Syntaxfehler bei logischen Operatoren

Wenn deine Abfrage einen logischen Operator zum Vergleichen von Zeitstempelwerten verwendet, erhältst du möglicherweise einen Ausnahmefehler.

Die TIMESTAMP-Daten in deiner Tabelle haben möglicherweise das falsche Format. Athena benötigt das Java TIMESTAMP-Format. Verwende die Trino-Datums- und Uhrzeitfunktion, um STRING in der Abfragefilterbedingung in TIMESTAMP zu konvertieren, oder verwende CAST, um STRING in TIMESTAMP zu konvertieren. Weitere Informationen findest du auf der Trino-Website unter Funktionen und Operatoren für Datum und Uhrzeit.

Führe die folgenden Schritte aus:

  1. Erstelle eine Tabelle mit Zeitstempeldaten im STRING-Format, ähnlich dem folgenden Beispiel:
    CREATE TABLE testdataset1 AS SELECT testid1, testname1, date_parse(testtimestamp1, '%m/%d/%Y %h:%i:%s %p') AS testtimestamp1
    FROM (
        VALUES
            (1, 'a', '7/14/2020 8:22:39 AM'),
            (2, 'b', '8/01/2015 10:22:39 PM'),
            (3, 'c', '8/13/2017 4:22:39 AM')
    ) AS t(testid1, testname1, testtimestamp1)
    Hinweis: Ersetzen testdataset1, testid1, testname1 und testtimestamp1 durch deine Werte.
  2. Verwende die CAST-Funktion auf den STRING-Wert, um den Zeitstempelfilter anzuwenden:
    SELECT * FROM testdataset1 WHERE testtimestamp1 < CAST('2020-07-14 00:00:00' AS timestamp)
    Hinweis: Ersetze testdataset1 und testtimestamp1 durch deine Werte.

Ungültige Argumentfehler mit CAST

Wenn du CAST verwendest, um eine Spalte in den TIMESTAMP-Datentyp zu konvertieren, erhältst du möglicherweise einen Ausnahmefehler.

Der Datentyp der Spalte, die du in TIMESTAMP umwandeln möchtest, ist möglicherweise ein Typ, den Athena nicht unterstützt. Verwende die Datums- und Uhrzeitfunktionen von Trino, um die Spalte in deiner Abfrage als DATUM oder TIMESTAMP zu lesen. Weitere Informationen findest du auf der Trino-Website unter Funktionen und Operatoren für Datum und Uhrzeit.

Führe die folgenden Schritte aus:

  1. Erstelle eine Tabelle ähnlich dem folgenden Beispiel:
    CREATE TABLE testdataset2 AS SELECT * FROM
    (VALUES
            (1, 'a', '7/14/2020 8:22:39 AM'),
            (2, 'b', '8/01/2015 10:22:39 PM'),
            (3, 'c', '8/13/2017 4:22:39 AM')
    ) AS t(testid2, testname2, testtimestamp2)
    Hinweis: Ersetze testdataset2, testid2, testname2 und testtimestamp2 durch deine Werte.
  2. Verwende die Trino-Funktion date_parse, um deine Tabelle in das Java-TIMESTAMP-Format zu konvertieren:
    SELECT testid2, testname2, date_parse(testtimestamp2, '%m/%d/%Y %h:%i:%s %p') AS testtimestamp2 FROM testdataset2
    Hinweis: Ersetze testdataset2, testid2, testname2 und testtimestamp2 durch deine Werte.

Ähnliche Informationen

Warum ist das TIMESTAMP-Ergebnis leer, wenn ich eine Tabelle in Amazon Athena abfrage?

AWS OFFICIALAktualisiert vor 8 Monaten