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 contenant 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 obtenir cette exception si vous avez utilisé un opérateur logique, tel que « > », entre les valeurs TIMESTAMP et STRING dans votre requête.
- **cast(col comme horodatage) avec INVALID_CAST_ARGUMENT :**vous pouvez obtenir cette exception si vous effectuez la conversion sur une colonne dont le type de données 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)
Les données TIMESTAMP de votre table ne sont peut-être pas au bon format. Athena nécessite le format Java TIMESTAMP. Utilisez la fonction de date et d’heure de Presto ou de conversion pour changer la chaîne en TIMESTAMP dans la condition du filtre de requête. Pour en savoir plus, consultez la section Fonctions et opérateurs de date et d’heure dans la documentation Presto.
1. Créez un tableau 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 de conversion sur la valeur littérale (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 de date et d’heure de Presto pour lire la colonne en tant que DATE ou TIMESTAMP dans votre requête.
1. Créez un tableau 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 à l’aide de la fonction Presto date_parse :
SELECT testid2,testname2,date_parse(testtimestamp2,'%m/%d/%Y %h:%i:%s %p') AS testtimestamp2 FROM testdataset2
Informations connexes
Pourquoi le résultat TIMESTAMP est-il vide lorsque j’interroge une table dans Amazon Athena ?