【问题标题】:Redshift COPY from S3 fails when timestamp is not correct当时间戳不正确时,来自 S3 的 Redshift COPY 失败
【发布时间】:2017-09-26 05:19:50
【问题描述】:

通过 COPY 命令将数据从 S3 加载到 Redshift 时,如果文件中的任何记录包含不正确的时间戳,则复制失败。我已将 maxerror 作为 1000 传递给 COPY 命令,但仍然失败。

但是,在随后的重试中,相同的命令会起作用。虽然它无法加载损坏的记录。

这是我得到的错误:

ERROR:  Assert
DETAIL:  
  -----------------------------------------------
  error:  Assert
  code:      1000
  context:   status == 0 - timestamp: '-6585881136298398395'
  query:     30903
  location:  cg_util.cpp:1063
  process:   query1_69 [pid=25674]
  -----------------------------------------------

AWS cli version : aws-cli/1.10.56 Python/2.7.12 Linux/4.4.19-29.55.amzn1.x86_64 botocore/1.4.46

有人遇到过同样的问题吗?你是怎么解决的?

【问题讨论】:

  • 您可以做的一个技巧是将时间戳字段作为字符串加载,然后使用 UPDATE 命令根据字符串填充时间戳列。
  • @JohnRotenstein 我对没有加载到红移的损坏记录(包含错误时间戳的记录)很好。但是应该加载其他记录,我认为将复制命令中的 maxerror 参数设置为某个值应该可以处理这个问题。但我看不到行为一致,有时会加载数据,有时会失败。

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


【解决方案1】:

追加

ACCEPTANYDATE dateformat 'auto'

在您的副本声明中。

ACCEPTANYDATE dateformat (AWS 文档)

这至少会尝试强制您的复制语句不会失败。尽管如此,一些不受支持的格式可能是空的(正如你所提到的,我对损坏的记录(包含错误时间戳的记录)没有被加载到 redshift 很好。但应该加载其他记录) p>

【讨论】:

  • 我正在使用时间格式“自动”。根据文档,aws 建议将 ACCEPTANYDATE 与日期格式一起使用,而不是与时间格式一起使用。谢谢,试试看。
  • 谢谢 :) 另外,请点赞并让其他人知道它是否有效。
  • 当然,我还有一个疑问。为什么 maxerror 不处理这个?,您是否遇到过与 maxerror 完全相同的问题?
猜你喜欢
  • 1970-01-01
  • 2016-08-06
  • 1970-01-01
  • 1970-01-01
  • 2023-03-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多