[MySQL] Workbench LOAD DATA LOCAL INFILE ERROR
2023. 5. 31. 02:23ㆍTip
728x90
배경
FastCampus 강의 수강 중, csv 형식의 데이터를 테이블로 적재하는 과정 중 내장된 Import Wizard의 성능 이슈로 다른 방법을 모색했다. 초기 설정의 workbench에서는 보안적인 이유로 제한되는 LOAD DATA LOCAL INFILE 문을 활용하여 문제를 해결한 과정을 정리하였다.
STEP 1: Workbench Server Connection 설정
Server side의 옵션으로 OPT_LOCAL_INFILE=1 을 추가한다.
참고: CLI 사용자들은 mysql --local-infile=1 -h [서버주소] -u [사용자이름] -p [암호] 형식으로 값을 변경하면 된다.
자세한 내용은 관련 키워드로 검색하기!
STEP 2: Client 설정
기본적으로 전역변수 local_infile의 값은 0(FALSE)으로 설정되어 있다.
SET GLOBAL local_infile = TRUE;
쿼리를 실행한 후에는 OFF 값이 ON으로 바뀐다.
STEP 3: Query
다음은 LOAD DATA LOCAL INFILE 문을 활용하여 CSV 파일을 테이블에 적재하는 쿼리문이다.
DROP TABLE IF EXISTS prac.tbl_customer;
CREATE TABLE IF NOT EXISTS prac.tbl_customer (
customer_id INT,
created_at CHAR(25),
gender VARCHAR(6),
age INT
);
SHOW TABLES;
LOAD DATA LOCAL INFILE "C:/Users/user/Documents/prac/sqlPrac/source/tbl_customer.csv"
INTO TABLE prac.tbl_customer
FIELDS TERMINATED BY ","
IGNORE 1 LINES;
SELECT * FROM tbl_customer;
** 실습에 사용한 csv 파일의 첫번째 행은 필드명이 들어가기 때문에 IGNORE 1 LINES 문으로 입력을 넘어갔다.
RESULT
총 14226개의 레코드 중
변수명이 들어간 첫번째 줄을 제외하고
총 14225개의 레코드가 정상적으로 삽입되었다.
실습 쿼리 전문
더보기
SHOW DATABASES;
USE fastcampus;
SHOW TABLES;
/*
* START IMPORT CSV FILE
*/
SET GLOBAL local_infile = TRUE;
/*
* TABLE: tbl_customer
*/
DROP TABLE IF EXISTS fastcampus.tbl_customer;
CREATE TABLE IF NOT EXISTS fastcampus.tbl_customer (
customer_id INT,
created_at CHAR(25),
gender VARCHAR(6),
age INT
);
SHOW TABLES;
LOAD DATA LOCAL INFILE "C:/Users/user/Documents/prac/sqlPrac/source/tbl_customer.csv"
INTO TABLE fastcampus.tbl_customer
FIELDS TERMINATED BY ","
IGNORE 1 LINES;
SELECT * FROM tbl_customer;
/*
* TABLE: tbl_purchase
*/
DROP TABLE IF EXISTS fastcampus.tbl_purchase;
CREATE TABLE IF NOT EXISTS fastcampus.tbl_purchase (
id INT,
customer_id INT,
purchased_at CHAR(25),
category VARCHAR(20),
product_id VARCHAR(20),
price INT
);
SHOW TABLES;
LOAD DATA LOCAL INFILE "C:/Users/user/Documents/prac/sqlPrac/source/tbl_purchase.csv"
INTO TABLE fastcampus.tbl_purchase
FIELDS TERMINATED BY ","
IGNORE 1 LINES;
SELECT * FROM tbl_purchase;
/*
* TABLE: tbl_visit
*/
DROP TABLE IF EXISTS fastcampus.tbl_visit;
CREATE TABLE IF NOT EXISTS fastcampus.tbl_visit (
id INT,
customer_id INT,
visited_at CHAR(25)
);
SHOW TABLES;
LOAD DATA LOCAL INFILE "C:/Users/user/Documents/prac/sqlPrac/source/tbl_visit.csv"
INTO TABLE fastcampus.tbl_visit
FIELDS TERMINATED BY ","
IGNORE 1 LINES;
SELECT * FROM tbl_visit;
/*
* END IMPORT LOCAL FILES
*/
SET GLOBAL local_infile = FALSE;
SHOW GLOBAL VARIABLES LIKE 'local_infile';
728x90
'Tip' 카테고리의 다른 글
Download Eclipse (0) | 2023.06.15 |
---|---|
[Java] OOP, Builder 패턴을 사용한 Person 클래스 정의 (0) | 2023.06.11 |
[Java] Stream to List (0) | 2023.04.12 |
[해커톤] 웹 개발 팁 정리 (0) | 2023.04.02 |
[Visual Studio] Error Code: LNK1168 Tip (0) | 2022.11.16 |