从 s3 复制到 redshift

Posted

技术标签:

【中文标题】从 s3 复制到 redshift【英文标题】:Copy from s3 to redshift 【发布时间】:2014-06-10 20:31:49 【问题描述】:

我正在从 s3 加载数据到 redshift,使用 MANIFEST 指定加载,因为我必须加载 8k 个文件(总数据集大小 ~1TB)

我正在使用 SQLWorkbench 加载此数据集,我设置 MAXERROR = 100000,但实际发生的错误大于 100000 (MAXERROR=100000)。我认为 SQLWorkbench 的 MAXERROR 限制为 100000。

有没有更好的方法来做到这一点?有什么建议吗?

【问题讨论】:

您能否 (1) 将 MAXERROR 设置为更高的值,(2) 将负载拆分为多个批次(多个清单),或 (3) 修复部分错误(例如与架构相关的问题)?对于后者,STL_LOAD_ERRORS 提供了有关究竟出了什么问题的信息。 (1) 我尝试设置 MAXERROR > 100000,但我认为 SQLWorkbench 的 MAXERROR 的 MAX 值为 100000。我不知道如何将其设置为高于 100000。(2) 我已经拆分负载(8K 文件到 500 个文件/清单的清单中)仍然有同样的问题。 (3) 数据中的某些记录不限于模式,但我不太关心这些记录是否加载到红移。有没有其他方法可以加载这些数据? 我检查了 STL_LOAD_ERRORS 并注意到只有两种类型的错误(1)“分隔值缺少结束引号”和(2)“无效数字,值 'c',位置 0,类型:长” ,有什么帮助解决这个问题吗? 错误1:字段应该被引用吗?如果没有,请禁用引号。错误 2:您试图将带有字母的值加载到数字列中。将其加载到例如一个 VARCHAR 列。如果您需要它作为整数,请先将其加载到临时表中并从那里转换。 (1) 引用了一些字段,但我指定 REMOVEQUOTES 以摆脱它,(2) 我已通过将数据类型从 BIGINT 更改为 VARCHAR 来解决此问题,因为实际字段是时间戳:BIGINT , 但有些记录有字符串而不是 INT。 【参考方案1】:

如果您在导入的数据中确实有超过 100,000 个错误,我建议您需要返回源并更正文件。如果这不可能,那么您可以尝试将数据加载到一个表中,并将有问题的列设置为 VARCHAR(MAX),然后您可以在 Redshift 中将它们转换。

【讨论】:

是的,我也是这样做的,用 varchar 加载数据,然后删除不适合模式的记录器,然后转换数据类型

以上是关于从 s3 复制到 redshift的主要内容,如果未能解决你的问题,请参考以下文章

如何使用从 s3 到 redshift db 的复制命令解决语法错误

将文件(带有特定后缀)从 S3 复制到 Redshift

将数据从本地复制到 S3 到 Redshift 表时出现问题

Node-Redshift 是不是支持复制命令(查询)将数据从 S3 加载到 Redshift?

将数据从 s3 复制到 redshift 时忽略所有无效记录

AWS:使用从 s3 到 redshift 的复制命令时没有插入任何内容