【问题标题】:Redshift Error 1202 "Extra column(s) found" using COPY command使用 COPY 命令的 Redshift 错误 1202“找到额外的列”
【发布时间】:2016-06-30 03:23:07
【问题描述】:

尝试加载简单的 CSV 时,我在 Redshift 中收到 1202 Extra column(s) found 错误。我已确保文件中没有其他列或任何未转义的字符会导致 COPY 命令因此错误而失败。

这是创建的目标表:

create table test_table(
  name varchar(500),
  email varchar(500),
  developer_id integer,
  developer_name varchar(500),
  country varchar(20),
  devdatabase varchar(50));

我使用的是没有标题且只有 3 行数据的简单 CSV:

john smith,john@gmail.com,123,johndev,US,comet
jane smith,jane@gmail.com,124,janedev,GB,titan
jack smith,jack@gmail.com,125,jackdev,US,comet

很遗憾,我的 COPY 命令失败并显示 err_1202 "Extra column(s) found"

COPY test_table 
FROM 's3://mybucket/test/test_contacts.csv'    
WITH credentials AS 'aws_access_key_id=<awskey>;aws_secret_access_key=<mykey>'
CSV;

文件中没有其他列。

【问题讨论】:

  • 我按照您的步骤成功将数据导入到 Redshift 表中。我已经清理了您的问题(删除了架构名称、关闭的凭据引用、提到的存储桶名称),因此您可能需要确认它仍然符合您的情况。我将数据作为文本文件保存在 S3 存储桶中(未压缩)。
  • 有时名称中包含逗号 (,),您可能需要遍历数据并引用它们
  • 您检查了 stl_error 表还是查看了来自 SQL 客户端的错误消息? SELECT err_reason,raw_line,err_code,query,session,tbl FROM stl_load_errors WHERE filename like 's3://mybucket/test/test_contacts%' ORDER BY query DESC, starttime DESC
  • 将分隔符更改为 ~ 如果不是,请尝试在导入环境时检查表架构是否正确。

标签: csv amazon-web-services amazon-s3 amazon-redshift


【解决方案1】:

我在加载数据时也遇到了同样的问题。我使用以下代码进行了纠正:

copy yourtablename
from 'your S3 Locations'
credentials 'your AWS credentials' 
delimiter ',' IGNOREHEADER 1 
removequotes
emptyasnull
blanksasnull
maxerror 5;

【讨论】:

    【解决方案2】:

    试试这个:

    COPY test_table 
    FROM 's3://mybucket/test/test_contacts.csv'    
    WITH credentials AS 'aws_access_key_id=<awskey>;aws_secret_access_key=<mykey>'
    delimiter ',' 
    ignoreheader as 1 
    emptyasnull
    blanksasnull
    removequotes
    escape;
    

    来源:https://docs.aws.amazon.com/redshift/latest/dg/r_COPY_command_examples.html#r_COPY_command_examples-copy-data-with-the-escape-option

    【讨论】:

      【解决方案3】:

      确保在复制语句(和源文件)中指定了正确的分隔符。我遇到了同样的问题。经过几次使用不同分隔符的尝试(同时将表卸载到 s3 文件,然后从 s3 文件复制到另一个表中),我能够使用 delimiter '\t' 解决问题。以下是我的完整示例:

      copy <TABLE-NAME>
      from 's3://<FILES/LOCATION>'
      access_key_id '<INSERT>'
      secret_access_key '<INSERT>'
      delimiter '\t'
      ignoreheader 1
      maxerror 10;
      

      【讨论】:

        【解决方案4】:

        对我来说,原来是我在集群内的错误数据库上执行了脚本。

        【讨论】:

        • 与问题中的问题没有直接关系
        猜你喜欢
        • 1970-01-01
        • 2014-03-18
        • 2016-07-11
        • 2021-03-20
        • 1970-01-01
        • 2020-02-01
        • 2016-06-10
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多