프로젝트를 진행하다 대용량 데이터를 MySQL DB에 import 해야 되는 상황이 있었는데, 대용량 데이터의 경우 workbench에서 테이블에 import 할 수도 있지만
이렇게 하면 시간이 너무 오래걸려서 LOAD DATA 문을 사용하면 훨씬 빨리 처리할 수 있다는 구글링 결과를 적용해서 해결한 과정을 정리해 보겠습니다.
대략 3만 개의 row를 table에 추가하려고 하니까 10분이 넘도록 게이지가 안 올라서 다음과 같이 LOAD DATA 문을 활용했습니다.
load data infile '원하는 파일 경로'
into table 스키마.테이블
character set utf8
fields terminated by ','
lines terminated by '\n'
ignore 1 rows # 첫 번째 header를 생략하기 위해서
(@Date, @stock_code, @Open, @High, @Low, @Close, @Volume, @Change)
SET stock_code = @stock_code,
stock_date = STR_TO_DATE(@Date, '%Y-%m-%d'),
open_price = @Open,
low_price = @Low,
high_price = @High,
close_price = @Close,
trading_volume = @Volume,
stock_change = 0.1;
대략 이런 형태로 LOAD DATA문을 활용했습니다.
저기 아래에 SET절 위에 괄호에 들어가는 부분은 입력하는 파일에 작성된 column 명들로 직접 테이블에 사용하고 싶은 경우에는 '@'를 안붙이고, 생략하고 싶은 경우는 '@'를 붙여서 변수처럼 사용한다고 합니다.
'@'를 붙인 애들은 아래의 SET 절에서 테이블의 column에 그대로의 값 혹은 계산을 해서 넣어줄 수 있는데, 저는 예시 코드랑 비스무리하게 넣어줬습니다.
명령어 사용시 발생했던 오류 Error code: 1290
1290 에러는 다음과 같이 설명이 뜹니다.
⚠ the mysql server is running with the --secure-file-priv option so it cannot execute this statement ⚠
이거는 대강 secure-file-priv 옵션이 켜져 있어서 sql문을 수행할 수 없다는 뜻인데, 이게 무슨 말이냐 하면은 저 옵션이 켜져 있는 이상, 모든 경로가 아닌 허용된 경로 내에 있는 파일에 대한 접근을 허용한다는 말입니다.
그래서 허용된 경로가 어딘가? 는 다음 명령어를 이용하면 확인이 가능합니다!
저는 워크벤치에서 명령어를 입력한 결과가 저렇게 나와서, 저 안에 원하는 파일을 넣어 LOAD DATA의 파일 경로에 작성해 주니 오류를 해결할 수 있었습니다.
참고 자료
https://quatremains.tistory.com/31
댓글