Comment puis-je résoudre les exceptions d'horodatage lorsque j'interroge une table dans Amazon Athena ?

Date de la dernière mise à jour : 09/04/2021

Lorsque j'interroge une colonne de données TIMESTAMP dans ma table Amazon Athena, je reçois une exception.

Brève description

Lorsque vous interrogez une table Athena avec des données TIMESTAMP, votre requête peut échouer avec l'une des exceptions suivantes :

  • SYNTAX_ERROR : la ligne '>' ne peut pas être appliquée à l'horodatage, varchar (19) : Vous pouvez recevoir cette exception si vous avez utilisé un opérateur logique comme '>', entre les valeurs TIMESTAMP et STRING dans votre requête.
  • cast(col en tant qu'horodatage) avec INVALID_CAST_ARGUMENT : Vous pouvez obtenir cette exception si vous utilisez la diffusion sur une colonne avec le type de données qui n'est pas pris en charge par Athena.

Résolution

Exception : SYNTAX_ERROR : la ligne '>' ne peut pas être appliquée à l'horodatage, varchar (19)

Il est possible que les données TIMESTAMP de votre table soient dans le mauvais format. Athena prend en charge le format Java pour TIMESTAMP : Utilisez la fonction date et heure ou la diffusion de Presto pour convertir STRING en TIMESTAMP dans la condition de filtre de requête. Pour plus d'informations, consultez Fonctions et opérateurs de date et d'heure dans la documentation de Presto.

1.    Créez une table testdataset1 en exécutant une requête similaire à la suivante :

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.    Appliquez le filtre d'horodatage en utilisant la fonction « cast » sur la valeur littérale (par exemple : 2020-07-14 00:00:00) :

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

Exception : cast(col en tant qu'horodatage) avec INVALID_CAST_ARGUMENT

Utilisez les fonctions heure et date de Presto afin de lire la colonne en tant que DATE ou TIMESTAMP dans votre requête.

1.    Créez une table testdataset2 en exécutant une requête similaire à la suivante :

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.    Convertissez la colonne STRING TIMESTAMP testtimestamp2 au format JAVA TIMESTAMP en utilisant la fonction date_parse de Presto :

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

Cet article vous a-t-il été utile ?


Besoin d'aide pour une question technique ou de facturation ?