MySQL에서 데이터를 적재하기 위해서 Table Data Import Wizard
기능을 사용할 수 있습니다.
그러나, 대용량 데이터의 경우 데이터 import에 매우 오랜 시간이 걸리게 됩니다.
대용량 데이터를 import 해주는 LOAD DATA LOCAL INFILE
문을 활용하면 문제 상황을 해결할 수 있습니다.
SET GLOBAL local_infile = true;
LOAD DATA LOCAL INFILE
문을 사용하기 위해 다음의 코드를 실행하여 local_infile
기능을 사용할 수 있는 환경을 세팅합니다.
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 해올 데이터를 담을 수 있는 테이블을 생성합니다.
이때, 저는 대략 70개의 변수를 갖는 데이터를 불러와야 했기에 반복 작업을 ChatGPT로 처리하였습니다.
csv 파일에서 컬럼명이 있는 행과 예시 데이터 총 2개의 행을 복사합니다.
프롬프트에 다음과 같이 명령을 전달하였습니다.
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 '"'
문을 추가하여 데이터 필드를 큰따옴표로 감싸주어 데이터가 잘 분리되도록 합니다.
쉼표가 포함된 대용량 데이터가 10초 내로 import 된 것을 확인할 수 있습니다.
💡 질문과 피드백은 댓글에 남겨주시기 바랍니다.
❤️ 도움이 되셨다면 공감 부탁드립니다.