首页 > 解决方案 > Redshift 中的 COPY CSV 命令是否按标题中定义的顺序加载?

问题描述

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

因此,如果我有一个包含列的 CSVid|age|name并且我有一个包含列的 Redshift 表id|name|age,它将尝试按 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';

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

标签: csvamazon-s3amazon-redshift

解决方案


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

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


推荐阅读