Redshift 中的 COPY CSV 命令是不是按标题中定义的顺序加载?

Posted

技术标签:

【中文标题】Redshift 中的 COPY CSV 命令是不是按标题中定义的顺序加载?【英文标题】:Does the COPY CSV command in Redshift load in the order defined in the headers?Redshift 中的 COPY CSV 命令是否按标题中定义的顺序加载? 【发布时间】:2018-09-03 11:21:41 【问题描述】:

我有一些代码可以将 CSV 从 S3 提取到 Redshift 表中。我遇到的问题是,如果 CSV 以特定的列顺序存储,则复制命令与 CSV 标题中的列顺序不匹配。

因此,如果我有一个包含 id|age|name 列的 CSV 并且我有一个包含 id|name|age 列的 Redshift 表,它将尝试按 CSV 标题顺序拉入数据。因此在这种情况下,它会尝试将名称 CSV 列拉入 Redshift 中的年龄列,这会导致类型错误。

我的查询是:

copy schema.#tmp from <s3file> 
iam_role <iamrole> 
acceptinvchars 
truncatecolumns
IGNOREBLANKLINES
ignoreheader 1
                  COMPUPDATE OFF
                  STATUPDATE OFF
                  delimiter ','
                  timeformat 'auto'
                  dateformat 'auto';

是否需要在复制命令中定义列顺序以使两者匹配?

【问题讨论】:

【参考方案1】:

COPY 忽略文件中的列名;列从左到右匹配。

但您可以在COPY 语句中指定列列表。用它来告诉 PostgreSQL 文件中列的顺序。

【讨论】:

以上是关于Redshift 中的 COPY CSV 命令是不是按标题中定义的顺序加载?的主要内容,如果未能解决你的问题,请参考以下文章

来自 S3 的 AWS Redshift COPY csv

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

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

Redshift COPY csv 数组字段以分隔行

Redshift COPY 从带有 JSON 字段的 CSV 文件到 SUPER 列

Amazon RedShift 中的“复制”命令是不是是原子的?