프로그래밍데이터 엔지니어

대량 삽입(bulk insert)을 사용하여 파일에서 SQL 테이블로 데이터를 임포트하여 최대 성능을 보장하고 데이터의 정확성을 유지하려면 어떻게 해야 합니까? 다양한 DBMS에서 어떤 도구를 사용해야 하며 오류 제어의 섬세한 점은 무엇입니까?

Hintsage AI 어시스턴트로 면접 통과

답변.

대량 삽입(bulk insert) 대량 데이터 임포트에는 전문 명령 및 유틸리티가 사용됩니다: BULK INSERT, COPY, LOAD DATA INFILE, 외부 도구인 bcp (SQL Server), psql (PostgreSQL) 및 ETL 도구.

주요 사항:

  • 여분의 변환 없이 CSV/TXT 형식을 사용하세요.
  • 데이터 검증이 필요하지 않은 경우 임포트 중 트리거와 인덱스를 비활성화하세요 - 이는 속도를 증가시킵니다.
  • 임포트 전에 및/또는 후에 참조 무결성 검사를 수행하세요.
  • 임시 테이블에 임포트하고 유효성을 검사한 후 기본 테이블로 대량 삽입을 수행하세요.
  • 지원되는 경우 데이터를 배치로 나누도록 하세요.
  • 반환 코드/로그를 확인하세요 - bulk insert는 실패를 간과할 수 있습니다.

PostgreSQL의 예:

COPY staging_table (id, name, age) FROM '/path/to/data.csv' DELIMITER ',' CSV HEADER; -- 데이터 검증 후 프로덕션 테이블로 이동 INSERT INTO prod_table (id, name, age) SELECT id, name, age FROM staging_table WHERE age >= 0 AND name IS NOT NULL;

함정 질문.

질문: 인덱스가 있는 큰 테이블에 bulk insert를 한 후 후속 작업의 성능 저하를 경험할 수 있는 이유는 무엇인가요?

답변: bulk insert는 테이블에 직접 데이터를 삽입하고, 인덱스는 주요 임포트가 완료된 후에만 재구성/업데이트되므로 테이블이 잠기고 자원이 소모될 수 있습니다. 임포트 중에는 보조 인덱스를 비활성화하고 종료 후 재구성하거나 배치 처리를 하는 것이 좋습니다.


사례

물류 프로젝트에서 BULK INSERT를 통해 수백만 개의 행을 임포트했지만 임시 테이블 없이 수행하여 잘못된 데이터가 잘못된 정보로 인덱스를 채워 FK 및 체크 제약 조건으로 인해 불량 행의 일부를 "롤백"할 수 없었습니다. 데이터 정리를 수동으로 수행해야 했습니다.


사례

기업 서비스에서 bulk insert는 수치가 10배로 증가했습니다. 데이터가 업로드되는 동안 보조 인덱스가 비활성화되지 않았고 각 단계에서 인덱스 구조가 재계산되었습니다.


사례

핀테크 제품에서 대용량 파일을 업로드할 때 bulk insert가 오류 코드를 제대로 처리하지 않아 중요 정보의 일부를 잃어버리고 며칠 후 외부 출처와의 검토 후에야 발견되었습니다.