我正在尝试从S3存储桶将CSV文件复制到Redshift。当我执行命令时,我没有收到任何错误消息,但是负载不起作用。
命令:
COPY temp FROM 's3://<bucket-redacted>/<object-redacted>.csv'
CREDENTIALS 'aws_access_key_id=<redacted>;aws_secret_access_key=<redacted>'
DELIMITER ',' IGNOREHEADER 1;
响应:
Load into table 'temp' completed, 0 record(s) loaded successfully.
我试图通过系统表隔离问题,但没有迹象表明存在问题。
表定义:
CREATE TABLE temp ("id" BIGINT);
CSV数据:
id
123,
答案 0 :(得分:3)
csv文件中的行结尾可能最后没有unix换行符,因此COPY命令可能会将您的文件视为:
id123,
假设您启用了IGNOREHEADER
选项,并且文件中的行结尾不是COPY所期望的(我根据过去的经验假设),文件内容将被视为一行,然后跳过
对于从Windows环境创建的某些文件,我发生了这种情况。
我想要记住的一件事是CSV不是标准,更像是一种惯例,不同的产品/供应商对csv文件的创建有不同的实现。
答案 1 :(得分:0)
我重复了你的指示,它运作得很好:
CREATE TABLE
LOAD
(来自我自己的文本文件,只包含您显示的两行)这导致:
Code: 0 SQL State: 00000 --- Load into table 'temp' completed, 1 record(s) loaded successfully.
所以,你的命令没有明显的错误。
起初,我认为数据行末尾的逗号可能会导致Amazon Redshift认为有一些额外的数据列无法映射到您的表,但它对我来说很好。尽管如此,您可以尝试删除逗号,或创建一个额外的列来存储此“空”值。