2014-02-19 4 views
5

간단한 체인 s3-pipeline-redshift를 실행하려고하는데 입력 데이터 형식이 완전히 고생했습니다. 여기 내 파일입니다 :S3 to Redshift 입력 데이터 형식

1, 도요타 공원, 브리지 뷰, IL
2, 콜럼버스 크루 스타디움, 콜럼버스, 오하이오
3, RFK 경기장, 워싱턴 DC
4, 커뮤니티 아메리카 볼 파크, 캔자스 시티, KS
5, 질레트 스타디움, 폭스 버러, MA
6
8 일 뉴욕 자이언츠 스타디움, 이스트 러더 포드, 뉴저지
7, BMO 필드, 토론토, 홈 디포 센터, 카슨, CA
9, 딕의 스포츠 용품 Park, Commerce City, CO
(10), 피자 헛 공원, 프리 스코, 텍사스

여기 내가 사용하고 테이블의 :

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 오류가 발생합니다 - 쉼표를 사용할 때 구분 기호를 찾을 수 없습니다 - 파일을 utf-8로 변환 할 때 "유효하지 않은 숫자, 값 ', Pos 0, 유형 : Short '. 아이디어가 없어졌습니다. 그 일에 무슨 문제가 있습니까? 누군가가 나에게 입력 파일의 예를 들어 주거나 ​​내가 잘못하고 있다고 말 할 수 있습니까? 미리 감사드립니다. 추신 : 파일을 버킷 awssampledb에서 사용할 수 있지만 그들을 얻을 수있는 방법을 모르겠다.

답변

8

파일 예제의 데이터를 기반으로 테이블에 5 개의 필드가 있고 다섯 번째 필드가 없습니다 기억해야합니다. 모든 데이터 - 아직 null 필드가 아닙니다. 복사 명령은 명령문의 시작 부분에서 제공하는 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을 남겨 둠으로써 성공적으로 작동했습니다.

+0

감사합니다. 톤수를 사용하면 하루를 절약 할 수있었습니다. 마지막 매개 변수를 명시 적으로 정의하고 작동하기 시작했습니다. 그러나 당신이 제공 한 해결책에 관해서는 어떻게 파이프 라인에서 같은 일을 할 수 있습니까? – KorsaR