S3 转 Redshift 输入数据格式

Posted

技术标签:

【中文标题】S3 转 Redshift 输入数据格式【英文标题】:S3 to Redshift input data format 【发布时间】:2014-02-19 19:58:15 【问题描述】:

我正在尝试运行一个简单的链 s3-pipeline-redshift,但我完全被输入数据格式所困扰。这是我的文件:

1,丰田公园,布里奇维尤,IL 2,哥伦布船员体育场,哥伦布,俄亥俄州 3,RFK 体育场,华盛顿特区 4,CommunityAmerica Ballpark,堪萨斯城,KS 5,吉列体育场,福克斯伯勒,MA 6,纽约巨人体育场,东卢瑟福,新泽西 7,BMO 球场,多伦多,ON 8,家得宝中心,卡森,CA 9,迪克体育用品公园,商业城,CO 10,必胜客公园,弗里斯科,TX

这是我正在使用的表格:

    create table venue_new(
    venueid smallint not null,
    venuename varchar(100) not null,
    venuecity varchar(30),
    venuestate char(2),
    venueseats integer not null default '1000');

当我使用 |作为分隔符,我收到错误 1214 - Delimiter not found ,当我使用逗号时 - 同样的事情,当我将文件转换为 utf-8 时,我得到“无效的数字,值'。',Pos 0,类型:短的'。 我没有主意了。那东西到底有什么问题?有人可以给我输入文件的例子或告诉我做错了什么吗?提前致谢。 附:我还发现存储桶 awssampledb 中提供了示例文件,但我不知道如何获取它们。

【问题讨论】:

【参考方案1】:

基于文件示例中的数据。您需要记住,您的表中有 5 个字段,并且您的任何数据中都没有第 5 个字段 - 但它不是空字段。您的 Copy 命令需要引用您在语句开头提供的 4 列。

copy venue_new(venueid, venuename, venuecity, venuestate) 
from 's3://mybucket/data/venue_noseats.txt' 
credentials 'aws_access_key_id=<access-key-id>;aws_secret_access_key=<secret-access-key>'
delimiter ',';

我发现上面的命令(来自 AWS Docs COPY examples 为我成功工作,在“venueseats”列中留下了默认的 1000。

【讨论】:

非常感谢,你拯救了我的一天。我明确定义了最后一个参数,它开始工作。但是对于您提供的解决方案,我怎样才能在管道中做同样的事情?

以上是关于S3 转 Redshift 输入数据格式的主要内容,如果未能解决你的问题,请参考以下文章

使用 Spectrify 以 Parquet 格式将数据从 Redshift 卸载到 S3

我可以使用AWS Glue将S3上的json数据转换为柱状格式并将其推送到Redshift吗?

将 RedShift 文件以 CSV 格式移至 S3

Redshift Spectrum 读取文件的数据格式是啥?

带有 jsonpaths 的 Redshift 复制 JSON 数据失败并出现不正确的 json 格式错误

以特定分区格式将数据卸载到 redshift