J'ai créé une table dans Redshift:
create table myTable (
dateTime TIMESTAMP NOT NULL,
...
);
Cependant, lorsque j'essaie d'insérer un enregistrement contenant un dateTime
de, j'obtiens une erreur de stl_load_errors
.
20080215 04: 05: 06.789
Depuis que j'ai pris cet horodatage de la docs , je m'attendais à ce qu'il fonctionne.
Les journaux d'erreurs de Redshift montrent:
Format ou valeur d'horodatage non valide [AAAA-MM-JJ HH24: MI: SS]
Cependant, j'aimerais inclure 3 secondes supplémentaires, par exemple: 2015-02-01 15:49:35.123
.
Comment dois-je modifier mon champ d'horodatage pour l'insérer avec une précision supplémentaire en secondes?
TL; DR - Lors de l'importation dans Redshift à partir d'un fichier S3, forcez les données importées à avoir le format d'heure par défaut de 'YYYY-MM-DD HH:MI:SS'
Que Redshift attend afin d'obtenir une précision au-delà des secondes, sinon elles seront tronquées.
J'ai rencontré ce même problème en essayant de télécharger pour tirer de S3. Mon JSON d'origine a un horodatage comme celui-ci. { "updated_at" : "2014-12-08T21:14:49.351638" }
. Cependant, quand je suis allé le tirer dans Redshift, j'avais besoin de définir le format, qui incluait le T avant l'heure.
COPY schema.temp_table FROM 's3://s3-bucket/file-name' WITH CREDENTIALS 'aws_access_key_id=access-key;aws_secret_access_key=secret-key' format as json 'auto' timeformat 'YYYY-MM-DDTHH:MI:SS';
Cela importait tout, mais le temps était toujours tronqué en secondes, donc je me retrouvais avec 2014-12-08 21:14:49
Dans Redshift.
Le documentation ressemble à ceci devrait importer avec précision jusqu'à 6 endroits, mais ce n'était pas le cas.
J'ai décidé d'essayer le format par défaut 'YYYY-MM-DD HH:MI:SS'
Pour l'importation dans Redshift, j'ai donc dû changer ma base de données Postgres pour exporter le JSON pour les champs de date au format correct to_char(updated_at, 'YYYY-MM-DD HH24:MI:SS.SSSSS') as updated_at
.
Après avoir effectué cette modification, le nouveau JSON a été exporté en tant que { "updated_at" : "2014-12-08 21:14:49.351638" }
Et j'ai défini le format de temps pour l'importation dans Redshift comme valeur par défaut format as json 'auto' timeformat 'YYYY-MM-DD HH:MI:SS';
En effectuant cette modification pour utiliser le format horaire par défaut, Redshift a maintenant importé les horodatages avec la précision correcte!
timeformat 'auto'
et dateformat 'auto'
a bien fonctionné sur mon format, 2017-11-02T21:04:03.108Z
. Documentation sur http://docs.aws.Amazon.com/redshift/latest/dg/automatic-recognition.html
Dans votre commande de copie, veuillez ajouter ce format horaire 'YYYY-MM-DD HH: MI: SS';
Reportez-vous this pour plus de détails