2014-06-27 3 views
1

SQL 데이터베이스를 채우는 데 사용하는 csv 파일 그룹이 있습니다. 저는 이것을 매일의 과정으로 설정하고 있습니다. 나는 단지 일일 업데이트가 아닌 모든 역사적인 데이터가 포함 된 파일이 소수에 불과하다는 것을 발견했습니다.대량 행만 새 행 삽입

일괄 삽입을 시도하면 기본 키를 위반했기 때문에 오류가 발생합니다.

IGNORE_DUP_KEY = ON으로 설정하면 고유하지 않은 레코드가 삽입되는 것을 막을 수 있다고 생각했습니다.

CREATE TABLE TABLE1 
(
Column1 varchar(32), 
Column2 varchar(32), 
Column3 char(9), 
Column4 int, 
Column5 float(53), 
Column6 date, 
CONSTRAINT pk_One 
    PRIMARY KEY (Column1, Column2, Column6) 
    WITH (IGNORE_DUP_KEY = ON) 
); 

그럼 내가 도움이되지 않는 오류 메시지가 얻을 테이블 업데이트하는 스크립트를 실행하려고하면 "관련 진술 준비 (0)되지 않습니다."

결과를 별도의 테이블에 기록한 다음 적절한 테이블에 새 행을 쓰면이 문제를 해결할 수 있지만 다른 테이블에 대해 별도의 처리를하면 고통스럽고 추악한 결과를 초래합니다.

기본 키 제약 조건을 위반하지 않는 행만 쓰도록 SQL에 지시하는 쉬운 방법이 있습니까? 당신은 그냥 실패 삽입을 무시하려면 표 (1 열) 값 (값 1)

...에

+0

스테이징 테이블을로드하는 것을 주저하는 사람은 걱정하지 마십시오. ETL을 수행 할 때, 예를 들어 하나 이상의 CSV 파일에서 원시 값을 보유하는 스테이징 테이블을 가지는 것이 정상입니다. 그런 다음 'Insert'또는 'Merge' 문을 사용하여로드 프로세스를 제어 할 수 있습니다. 스테이징 테이블을 사용하면 인바운드 데이터의 품질 제어를보다 잘 제어 할 수 있습니다. – Mike

답변

0

삽입 그래서, INTO를 무시 INSERT 않습니다. 그런 다음 값을 삽입하고 실패하고 정상적으로 이동하려고 시도합니다. 당신이 그것을 삽입을 시도 새 값으로 중복 키 값을 바꾸려면, 체크 아웃 : (아래 옵션 무시, 당신이 오류를 던져하려는 경우에 따라 다릅니다.)

INSERT [IGNORE] INTO table1 (column1) values (value1) ON DUPLICATE KEY UPDATE 

그래서 "무시 삽입 체 "는 테이블 만들기가 아닌 삽입에 대한 대답입니다. mysql docs을 참조하십시오. ON DUPLICATE KEY UPDATE는 유용합니다.