如何忽略错误但不跳过 redshift 复制命令中的行
Posted
技术标签:
【中文标题】如何忽略错误但不跳过 redshift 复制命令中的行【英文标题】:How to ignore errors but not skip rows in redshift copy command 【发布时间】:2020-03-05 00:45:18 【问题描述】:我在 S3 中有一个嵌套的 json 作为我的源文件,我正在尝试将此文件复制到 redshift。 我的问题如下,
-
我使用 MAXERROR - 我需要跳过某些错误,因为源文件在某些情况下缺少某些字段并且在其他情况下包含它们
我使用 JSONPATH 文件 - 选择需要复制到 redshift 的字段
表中的所有列都是varchar
显然,由于我使用的是 maxerror 复制命令成功执行,但表有 0 条记录。这是我的复制命令
COPY public.table(col1,col2,col3,col4,col5,col6)
from 's3://bucket/filename'
credentials 'redshift'
format as JSON 'jsonpathfile.json'
timeformat 'YYYY-MM-DDTHH:MI:SS'
EMPTYASNULL ACCEPTANYDATE ACCEPTINVCHARS TRUNCATECOLUMNS maxerror 100 ;
如果我检查 stl_load_errors 它一直在说
无效的 JSONPath 格式:成员不是对象。
这是否意味着复制命令甚至无法找到一个适合 jsonpath 文件的对象? 这绝对不是真的。我推断输入文件的架构来设计jsonpath文件。
【问题讨论】:
【参考方案1】:这是来自COPY Examples - Amazon Redshift的示例:
copy category
from 's3://mybucket/category_object_paths.json'
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole'
json 's3://mybucket/category_jsonpath.json';
jsonpath
文件的路径已完全指定,而您的示例仅引用文件名。
尝试指定以s3://
开头的完整路径,看看是否有帮助。
【讨论】:
是的,当然,为了简单起见,我只提到了文件名,但我确实包含了完整的 s3:// 路径。以上是关于如何忽略错误但不跳过 redshift 复制命令中的行的主要内容,如果未能解决你的问题,请参考以下文章
如何使用从 s3 到 redshift db 的复制命令解决语法错误
使用 Avro 文件批量复制到 Amazon Redshift 中的异常处理
使用 Python 连接到 Redshift 数据 - 错误:当前事务被中止,命令被忽略,直到事务块结束