我有一些代码将CSV从S3拉入Redshift表。我遇到的问题是,如果CSV按特定列顺序存储,则复制命令与CSV标题中的列顺序不匹配。
因此,如果我有一个带有id|age|name
列的CSV并且我有一个带有id|name|age
列的Redshift表,它将尝试以CSV标题顺序提取数据。因此,在这种情况下,它会尝试将名称CSV列拉入Redshift中的age列,这会导致类型错误。
我的查询是:
copy schema.#tmp from <s3file>
iam_role <iamrole>
acceptinvchars
truncatecolumns
IGNOREBLANKLINES
ignoreheader 1
COMPUPDATE OFF
STATUPDATE OFF
delimiter ','
timeformat 'auto'
dateformat 'auto';
我是否需要在copy命令中定义列顺序以匹配两者?
COPY
忽略文件中的列名;列从左到右匹配。
但是您可以在COPY
语句中指定列列表。用它来告诉PostgreSQL文件中列的顺序。