Lorsque j’interroge une colonne de données TIMESTAMP dans ma table Amazon Athena, j’obtiens une exception.
Brève description
Lorsque vous interrogez une table Athena contenant des données TIMESTAMP, la requête peut échouer avec l’une des exceptions suivantes :
- "TYPE_MISMATCH: line 1:49: Cannot apply operator: timestamp(3) < varchar(19)" : SI vous avez utilisé un opérateur logique, tel que « > », entre les valeurs TIMESTAMP et STRING dans votre requête, vous pourriez obtenir cette exception.
- "cast(col as timestamp) with INVALID_CAST_ARGUMENT" : Si vous utilisez CAST sur une colonne dont le type de données n'est pas pris en charge par Athena, vous pourriez obtenir cette exception.
Résolution
Erreurs de syntaxe avec des opérateurs logiques
Si votre requête utilise un opérateur logique pour comparer les valeurs d'horodatage, vous pourriez obtenir une erreur d'exception.
Le format de vos données TIMESTAMP de votre table est peut-être incorrect. Athena nécessite le format Java TIMESTAMP. Utilisez la fonction date et heure de Trino pour convertir STRING en TIMESTAMP dans la condition du filtre de requête, ou utilisez CAST pour convertir STRING en TIMESTAMP. Pour plus d'informations, consultez la page Fonctions et opérateurs de date et heure sur le site Web de Trino.
Procédez comme suit :
- Créez une table contenant des données d'horodatage au format STRING, comme dans l'exemple suivant :
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)
Remarque : Remplacez testdataset1, testd1, testname1 et testtimestamp1 par vos valeurs.
- Utilisez la fonction CAST sur la valeur STRING pour appliquer le filtre d'horodatage :
SELECT * FROM testdataset1 WHERE testtimestamp1 < CAST('2020-07-14 00:00:00' AS timestamp)
Remarque : Remplacez testdataset1 et testtimestamp1 par vos valeurs.
Erreurs d'arguments non valides avec CAST
Si vous utilisez CAST pour convertir une colonne au type de données TIMESTAMP, vous pourriez obtenir une erreur d'exception.
Le type de données de la colonne que vous souhaitez convertir en TIMESTAMP est peut-être un type non pris en charge par Athena. Utilisez les fonctions de date et heure de Presto pour lire la colonne en tant que DATE ou TIMESTAMP dans votre requête. Pour plus d'informations, consultez la page Fonctions et opérateurs de date et heure sur le site Web de Trino.
Procédez comme suit :
- Créez une table similaire à l'exemple suivant :
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)
Remarque : Remplacez testdataset2, testid2, testname2 et testtimestamp2 par vos valeurs.
- Utilisez la fonction date_parse Trino pour convertir votre table au format TIMESTAMP Java :
SELECT testid2, testname2, date_parse(testtimestamp2, '%m/%d/%Y %h:%i:%s %p') AS testtimestamp2 FROM testdataset2
Remarque : Remplacez testdataset2, testid2, testname2 et testtimestamp2 par vos valeurs.
Informations connexes
Pourquoi le résultat TIMESTAMP est-il vide lorsque j’interroge une table dans Amazon Athena ?