2016-06-22 2 views
1

초기 개발에 사용 된 MySQL의 데이터웨어 하우스 스키마 및 기본 데이터로드를 프로덕션을 위해 Redshift로 이식합니다. 초기 기본 데이터는 http://www.kimballgroup.com/2010/10/design-tip-128-selecting-default-values-for-nulls/에 따라 자동 증가 열에 -1 값이 설정된 차원 테이블의 행으로 작성되었습니다.보고서에서 Null 값을 방지하기 위해 Redshift 차원 테이블의 기본값 행 만들기

는 Redshift에에 스키마를 이동하면, 열은 데이터베이스 기본 키 생성을 유지하기 위해 AUTO_INCREMENT에서 신분 변경되어서는 안된다, 그러나 이것은 더 이상 돌아 식별 컬럼에 삽입 할 수 있습니다

ERROR: cannot set an identity column to a value 
SQL state: 0A000 

할까요 ETL 로딩 작업은이 경우 차원 키를 자동으로 증가시키는 역할을합니까? 아니면 삽입 값을 생성 할 다른 작업이 있습니까?

답변

0

내가 알고있는 바로는 자동 생성 된 값을 무시하면 INSERT에 대해 작동하지 않습니다. S3에 데이터를 업로드 할 수있는 경우 Redshift의 COPY 명령을 사용하여 S3의 데이터를 표에로드 할 수 있습니다. 원본 데이터에서 명시 적 값으로 자동 생성 된 값을 대체하려면 IDENTITY 열을 테이블

사용 EXPLICIT_IDS 다음 documentation에서

COPY your_table from 's3://path_to_your/data.csv' CREDENTIALS '' EXPLICIT_IDS; 

: 그것은 당신이 옵션 EXPLICIT_IDS, 예를 지정하자 테이블에 대한 파일. 명령에 열 목록이 포함되어 있으면이 목록에이 매개 변수를 사용하기위한 IDENTITY 열이 포함되어야합니다. EXPLICIT_IDS 값의 데이터 형식은 CREATE TABLE 정의에 지정된 IDENTITY 형식과 일치해야합니다.