我在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
。
如何修改我的时间戳字段以在几秒钟内以额外的精度插入它?
答案 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