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

Lesedauer: 2 Minute
0

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

Kurze Beschreibung

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

  • SYNTAX\ _ERROR: Die Zeile '>' kann nicht auf Timestamp angewendet werden, varchar (19): Diese Ausnahme kann auftreten, wenn Sie in Ihrer Abfrage einen logischen Operator wie '>' zwischen den Werten TIMESTAMP und STRING verwendet haben.
  • cast (col als Timestamp) mit UNGÜLTIGEM\ _CAST\ _ARGUMENT: Diese Ausnahme kann auftreten, wenn Sie das Casting für eine Spalte mit einem Datentyp verwenden, der von Athena nicht unterstützt wird.

Auflösung

Ausnahme: SYNTAX\ _ERROR: Die Zeile '>' kann nicht auf Timestamp angewendet werden, varchar (19)

Die TIMESTAMP-Daten in Ihrer Tabelle haben möglicherweise das falsche Format. Athena benötigt das Java TIMESTAMP-Format. Verwenden Sie die Datums- und Uhrzeitfunktion von Presto oder das Casting, um den STRING in der Abfragefilterbedingung in TIMESTAMP zu konvertieren. Weitere Informationen finden Sie unter Funktionen und Operatoren für Datum und Uhrzeit in der Presto-Dokumentation.

1.Erstellen Sie eine Tabelle testdataset1, indem Sie eine Abfrage ausführen, die der folgenden ähnelt:

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)

2.Wenden Sie den Zeitstempelfilter an, indem Sie die Cast-Funktion auf den Literalwert verwenden (Beispiel: 2020-07-14 00.00.00):

SELECT * FROM testdataset WHERE testtimestamp1 < cast('2020-07-14 00:00:00' as timestamp)

Ausnahme: Cast(Spalte als Timestamp) mit INVALID\ _CAST\ _ARGUMENT

Verwenden Sie die Datums- und Uhrzeitfunktionen von Presto, um die Spalte in Ihrer Abfrage als DATUM oder TIMESTAMP zu lesen.

1.Erstellen Sie eine Tabelle testdataset2, indem Sie eine Abfrage ausführen, die der folgenden ähnelt:

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)

2.Konvertieren Sie die STRING TIMESTAMP-Spalte testtimestamp2 mit der Funktion date_parse von Presto in das JAVA TIMESTAMP-Format:

SELECT testid2,testname2,date_parse(testtimestamp2,'%m/%d/%Y %h:%i:%s %p') AS testtimestamp2 FROM testdataset2

Verwandte Informationen

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

AWS OFFICIAL
AWS OFFICIALAktualisiert vor 3 Jahren