从 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 表时出现问题
Node-Redshift 是不是支持复制命令(查询)将数据从 S3 加载到 Redshift?