[SQL] 대용량 데이터 import 방법 (LOAD DATA LOCAL INFILE), csv 데이터에 쉼표가 있을 때, 프롬프트 엔지니어링

아리엘 (Ariel)·2024년 5월 14일
1

SQL

목록 보기
6/9
post-thumbnail

📌 문제 상황

MySQL에서 데이터를 적재하기 위해서 Table Data Import Wizard 기능을 사용할 수 있습니다.

그러나, 대용량 데이터의 경우 데이터 import에 매우 오랜 시간이 걸리게 됩니다.


✅ 해결 방법

대용량 데이터를 import 해주는 LOAD DATA LOCAL INFILE 문을 활용하면 문제 상황을 해결할 수 있습니다.

1. 환경 세팅을 위한 SQL문 실행

SET GLOBAL local_infile = true;

LOAD DATA LOCAL INFILE 문을 사용하기 위해 다음의 코드를 실행하여 local_infile 기능을 사용할 수 있는 환경을 세팅합니다.


2. 테이블 생성

CREATE TABLE `kopis_2021_12_first` (
  `전송사업자코드` varchar(20) DEFAULT NULL,
  `전송사업자명` varchar(50) DEFAULT NULL,
  `공연시설코드` varchar(20) DEFAULT NULL,
  `시설특성` varchar(50) DEFAULT NULL,
   (중략)
  `판매페이지URL` varchar(255) DEFAULT NULL
);

import 해올 데이터를 담을 수 있는 테이블을 생성합니다.

cf) 프롬프트 엔지니어링

이때, 저는 대략 70개의 변수를 갖는 데이터를 불러와야 했기에 반복 작업을 ChatGPT로 처리하였습니다.

csv 파일에서 컬럼명이 있는 행과 예시 데이터 총 2개의 행을 복사합니다.

프롬프트에 다음과 같이 명령을 전달하였습니다.


3. 데이터 import

LOAD DATA LOCAL INFILE "데이터 경로/파일명.csv"
INTO TABLE 테이블명
CHARACTER SET utf8
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
LINES TERMINATED BY '\r\n'
IGNORE 1 ROWS;

SQL문의 데이터 경로, 테이블명, 그 외 설정을 데이터에 맞게 수정하여 실행합니다.

각 행별 의미는 다음과 같습니다.

  • CHARACTER SET utf8 : 한글이 포함된 데이터를 불러올 때 인코딩 방법
  • FIELDS TERMINATED BY ',' : 쉼표로 분리된 csv 파일에서 데이터를 분리하는 기준
  • ENCLOSED BY '"' : 데이터 필드를 큰따옴표로 감싸주는 설정
  • LINES TERMINATED BY '\r\n' : 줄바꿈 설정
  • IGNORE 1 ROWS; : 첫 행이 컬럼명일 경우 첫 행은 데이터로 인식하지 않음

이때, csv 파일의 데이터에 쉼표가 포함되면 데이터가 잘 분리되어 들어가지 않습니다.
따라서, ENCLOSED BY '"' 문을 추가하여 데이터 필드를 큰따옴표로 감싸주어 데이터가 잘 분리되도록 합니다.


4. 결과 확인


쉼표가 포함된 대용량 데이터가 10초 내로 import 된 것을 확인할 수 있습니다.



💡 질문과 피드백은 댓글에 남겨주시기 바랍니다.
❤️ 도움이 되셨다면 공감 부탁드립니다.


profile
Data Analyst / Engineer

0개의 댓글

관련 채용 정보