web-dev-qa-db-fra.com

Comment insérer la colonne TIMESTAMP dans Redshift

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?

12
Kevin Meredith

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!

19
stsmurf

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

6
jet

Dans votre commande de copie, veuillez ajouter ce format horaire 'YYYY-MM-DD HH: MI: SS';

Reportez-vous this pour plus de détails

4
Sandesh Deshmane