Lorsque j'interroge une table dans Amazon Athena, le résultat TIMESTAMP est vide

Date de la dernière mise à jour : 17/11/2020

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. Comment puis-je résoudre ce problème?

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é :

  1. Définissez la colonne en tant que STRING.
  2. 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. Pour plus d'informations, consultez Fonctions de date MySQL, dans la documentation Presto.

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

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


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