2014-04-15 5 views
-3

redshift에 73 개의 로컬 파일을로드하려고합니다. 데이터에는 쉼표 또는 탭과 같은 공통 구분 기호가 없습니다. 대신 구분 기호는 13 칸입니다. 이 공백을 구분 기호로 취급 할 수있는 방법이 있습니까?여러 개의 공백으로 구분 기호가있는 Amazon redshift에 데이터로드

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 개의 공백으로 데이터를 구분하는 더 쉬운 방법이 있습니까?

+0

대부분'Split' 기능은 동일한 구분 기호로 연속 구분 기호를 치료하는 방법이있다. 그러나 더 많은 정보없이 여기서 문제를 해결하는 방법을 말하는 것은 어렵습니다. 데이터를 어떻게로드하는지 알지 못합니다. –

+0

메모장에서 파일 열기. 13 개의 공백을 바꿉니다. 이제 .csv 파일이 있습니다. –

+0

구분 된 파일이 아닌 고정 너비 파일을 가지고있는 것처럼 들립니다. 파일을 사전 처리하는 것을 고려하십시오 (예 : Unix에서는 명령 행에서'sed '를 사용하거나 모든 파일에서 스크립트를 사용할 수 있습니다). –

답변

1

copy 명령은 단일 문자 분리 문자 만 허용하므로이 데이터를 목표 테이블로 직접 가져올 수 없습니다. 대신, 당신은 준비 테이블을 만들어야합니다 :

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

그런 다음 분할을 사용합니다 인구 목표 테이블에 대한 명령 (I 만 10 대를 계산하지 (13) 샘플에 유의) :

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; 
관련 문제