如何将TIMESTAMP列插入Redshift

时间:2015-02-02 21:50:33

标签: amazon-web-services timestamp amazon-redshift

我在Redshift中创建了一个表:

create table myTable (
       dateTime TIMESTAMP NOT NULL,
       ...
);

但是,当我尝试插入包含dateTime的记录时,我从stl_load_errors收到错误。

  

20080215 04:05:06.789

由于我从docs获取了这个时间戳,我希望它能有效。

Redshift的错误日志显示:

  

无效的时间戳格式或值[YYYY-MM-DD HH24:MI:SS]

但是,我想再加3秒,例如:2015-02-01 15:49:35.123

如何修改我的时间戳字段以在几秒钟内以额外的精度插入它?

3 个答案:

答案 0 :(得分:19)

TL; DR - 从S3文件导入Redshift时,强制导入的数据具有Redshift期望的默认时间格式GRANT ALTER, CREATE, DELETE, DROP, INSERT, SELECT, UPDATE ON db.* TO 'app_admin'@localhost IDENTIFIED BY '_my_securePass'; FLUSH PRIVILEGES; ,以便获得超过秒的精度,否则将被截断。

我尝试上传以从S3拉入时遇到了同样的问题。我原来的JSON有这样的时间戳。 'YYYY-MM-DD HH:MI:SS'。然而,当我把它拉进Redshift时,我需要设置格式,其中包括T之前的时间。

{ "updated_at" : "2014-12-08T21:14:49.351638" }

这导入了所有内容,但是时间总是被截断为秒,所以我最终会在Redshift中使用 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';

documentation看起来应该精确导入到6个位置,但事实并非如此。

我决定尝试使用默认格式2014-12-08 21:14:49导入Redshift,因此我必须更改Postgres数据库,以正确的格式'YYYY-MM-DD HH:MI:SS'导出日期字段的JSON。

进行此更改后,新的JSON导出为to_char(updated_at, 'YYYY-MM-DD HH24:MI:SS.SSSSS') as updated_at,并将导入Redshift的时间格式设置为默认{ "updated_at" : "2014-12-08 21:14:49.351638" }

通过进行此更改以使用默认时间格式Redshift现在以正确的精度导入时间戳!

答案 1 :(得分:5)

timeformat 'auto'dateformat 'auto'在我的格式2017-11-02T21:04:03.108Z上效果很好。 http://docs.aws.amazon.com/redshift/latest/dg/automatic-recognition.html

上的文档

答案 2 :(得分:3)

在你的复制命令中,请添加 timeformat' YYYY-MM-DD HH:MI:SS';

有关详细信息,请参阅this