Redshift COPY 命令中的时间戳格式无效

Posted

技术标签:

【中文标题】Redshift COPY 命令中的时间戳格式无效【英文标题】:Invalid timestamp format in Redshift COPY command 【发布时间】:2019-11-03 11:46:42 【问题描述】:

我几乎尝试了 SO 的所有解决方案,但仍然是同样的问题。我在 S3 中有一个 CSV 文件,在 Redshift 中有一个表。

表结构如下:

like_id => inetger
p_id => integer
c_id => integer
date_added => timestamp (without time zone)

CSV 文件包含以下数据:

1|1234|9876|2012-08-12 03:30:00
...
...
1500|4545|87545|2019-01-15 08:10:00

当我在 RedShift 中运行 COPY commnad 时,它给出了 Invalid timestamp format or value [YYYY-MM-DD HH:MI:SS] 的错误,我已经尝试了 RedShift 中几乎所有的时间日期格式,但仍然卡住了。复制命令如下:

copy likes from 's3://<myBucketPath>/like.csv'
credentials 'aws_iam_role=<IAM-Role-Here>'
delimiter '|' region 'us-west-2'
timeformat 'YYYY-MM-DD HH:MI:SS';
//timeformat 'MM/DD/YYYY HH:MI:SS'
//dateformat as 'auto'
//timeformat as 'auto'

注意:我以 CSV 格式从 mysql 导出表,date_added 列的数据类型为 datetime

【问题讨论】:

你能告诉我们你的COPY命令吗? @JohnRotenstein 先生,复制命令与您的相同,但我也添加了区域,并通过更改时间和日期格式进行检查。 “通过更改时间和日期格式进行检查”是什么意思?请编辑您的问题并包含您的 COPY 命令。 @JohnRotenstein 先生,我已经用复制命令更新了问题...请检查。 @JohnRotenstein,即使我使用 AWS GLUE 的 ETL 作业。它将我的date_added 列识别为String,在目标表中我选择timestamp 数据类型。结果,作业跳过 date_added 列并将 NULL 添加到数据库表中的 date_added 列。 【参考方案1】:

为了重现您的情况,我做了以下操作:

创建了一个 CSV 文件,其中包含:
1|1234|9876|2012-08-12 03:30:00
1500|4545|87545|2019-01-15 08:10:00
启动了一个 Amazon Redshift 集群并创建了一个表:
CREATE TABLE foo (like_id INT, p_id INT, c_id INT, date_added TIMESTAMP WITHOUT TIME ZONE)
将数据从 Amazon S3 加载到 Redshift 中:
COPY foo
FROM 's3://my-bucket/bar/'
IAM_ROLE 'arn:aws:iam::111111111111:role/my-role'
选择数据:
SELECT * FROM foo

结果是:

1     1234   9876  2012-08-12 03:30:00
1500  4545  87545  2019-01-15 08:10:00

所以,它似乎默认加载了它,不需要任何特殊设置。

我知道这是TIMESTAMP WITHOUT TIMEZONE,因为我可以这样做:

SELECT date_added + INTERVAL '15 minutes' FROM foo

2012-08-12 03:45:00
2019-01-15 08:25:00

【讨论】:

以上是关于Redshift COPY 命令中的时间戳格式无效的主要内容,如果未能解决你的问题,请参考以下文章

1214:使用 COPY 命令将数据从 csv 导入 Redshift 时 CSV 的报价格式无效

Redshift COPY 命令返回 stl_load_error 1205 无效的日期格式 - 长度必须为 10 或更多

Redshift COPY Statement 日期加载错误

Redshift COPY 命令中的投射日期列

尽管数据有效,但 Redshift 上的 COPY 总是失败并出现时间戳错误

使用 JSONPATHS 文件到 Redshift 的 JSON 文件 - 无效的 jsonpath 格式