Sql 将数据加载到Amazon红移中,使用分隔符作为多个空格

Sql 将数据加载到Amazon红移中,使用分隔符作为多个空格,sql,amazon-redshift,Sql,Amazon Redshift,我正在尝试将73个本地文件加载到redshift。数据没有常用分隔符,如逗号或制表符。相反,分隔符是13个空格。有没有办法将这些空格视为分隔符 我使用的是AWS文档中的相同示例。实际数据如下所示: 1 ToyotaPark Bridgeview IL 2 ColumbusCrewStadium Columbus OH 3 RFKStadium Washi

我正在尝试将73个本地文件加载到redshift。数据没有常用分隔符,如逗号或制表符。相反,分隔符是13个空格。有没有办法将这些空格视为分隔符

我使用的是AWS文档中的相同示例。实际数据如下所示:

1          ToyotaPark          Bridgeview          IL
2          ColumbusCrewStadium          Columbus          OH
3          RFKStadium          Washington          DC
4          CommunityAmericaBallpark          KansasCity          KS
5          GilletteStadium          Foxborough          MA
6          NewYorkGiantsStadium          EastRutherford          NJ
7          BMOField          Toronto          ON
8          TheHomeDepotCenter          Carson          CA
9          Dick'sSportingGoodsPark          CommerceCity          CO
10          PizzaHutPark          Frisco          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');

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 '          ';

实际数据大约有80个不同宽度的列。好的是,每个数据元素中都没有空间。而不是为每列指定固定宽度。是否有更简单的方法将数据分隔为13个空格?

复制命令只允许使用单字符分隔符,因此无法将此数据直接导入目标表。相反,您需要创建一个临时表:

create table stage_venue (venue_record varchar(200));
假设数据中没有管道字符|,则运行复制命令:

copy stage_venue from 's3://mybucket/data/venue_noseats.txt' credentials 'aws_access_key_id=<access-key-id>;aws_secret_access_key=<secret-access-key>';

大多数拆分函数都可以将连续分隔符视为同一分隔符。但是如果没有更多的信息,很难说出如何解决您的问题。我们甚至不知道您是如何加载数据的。请在记事本中打开文件。将13个空格替换为,现在您有了一个.csv文件,就像您有一个固定宽度的文件而不是分隔文件一样。考虑对文件进行预处理,例如在UNIX中,可以使用命令行中的SED或脚本来对所有文件进行操作。@ DavidStarkey不幸的是,对于记事本来说,数据太大了。@ EricJ。谢谢我确实想过,这将是我最终的解决办法。我只是想知道是否有一种更简单的方法直接使用红移,因为除了分隔符之外,列是非常一致的。
insert into venue_new (venueid, venuename, venuecity, venuestate), select split_part(venue_record,'          ',1),split_part(venue_record,'          ',2),split_part(venue_record,'          ',3),split_part(venue_record,'          ',4) from stage_venue;