Lorsque j'interroge une colonne de données TIMESTAMP dans ma table Amazon Athena, j'obtiens des résultats vides ou la requête échoue. Les données existent dans le fichier d'entrée.
Brève description
Il est possible que le format des données TIMESTAMP soit incorrect. Athena requiert le format Java pour TIMESTAMP :
YYYY-MM-DD HH:MM:SS.fffffffff
Afin que le format des données TIMESTAMP soit approprié :
- Définissez la colonne en tant que STRING.
- Utilisez les fonctions d'heure et de date de Presto afin de lire la colonne en tant que DATE ou TIMESTAMP dans votre requête.
Résolution
Définir la colonne en tant que STRING
Exécutez une commande similaire à la suivante :
CREATE EXTERNAL TABLE 'test' ('ts' STRING)
ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe'
LOCATION 's3://doc-example-bucket/path-to-data/'
Utiliser les fonctions d'heure et de date de Presto afin de lire la colonne en tant que DATE ou TIMESTAMP dans votre requête
Si vos données d'entrée sont au format suivant :
20200921T015005
20200923T095605
Ensuite, utilisez la fonction date_parse, comme l'illustre l'exemple suivant :
SELECT date_parse(ts,'%Y%m%dT%h%i%s') FROM timestamptestcsv3
Remarque : le format de la fonction date_parse(string,format) doit être au format TIMESTAMP utilisé dans vos données.
Si vos données d'entrée sont au format ISO 8601, comme suit :
2020-11-14T02:34:48Z
Ensuite, utilisez la fonction from_iso8601_timestamp() afin de lire le champ ts en tant que TIMESTAMP. Exemple :
SELECT from_iso8601_timestamp(ts) FROM timestamptestcsv3
Informations connexes
Types de données dans Amazon Athena