MariaDB / DATA / CSV 파일 데이터 가져오는 방법

LOAD DATA INFILE

MariaDB의 LOAD DATA INFILE로 텍스트 파일의 데이터를 가져올 수 있습니다. 문법은 다음과 같습니다.

LOAD DATA [LOW_PRIORITY | CONCURRENT] [LOCAL] INFILE 'file_name'
    [REPLACE | IGNORE]
    INTO TABLE tbl_name
    [CHARACTER SET charset_name]
    [{FIELDS | COLUMNS}
        [TERMINATED BY 'string']
        [[OPTIONALLY] ENCLOSED BY 'char']
        [ESCAPED BY 'char']
    ]
    [LINES
        [STARTING BY 'string']
        [TERMINATED BY 'string']
    ]
    [IGNORE number LINES]
    [(col_name_or_user_var,...)]
    [SET col_name = expr,...]

간단한 예제로 CSV 파일의 데이터를 가져오는 방법을 알아보겠습니다.

기본

  • 다음과 같은 내용을 가진 ab.csv 파일을 root 폴더 아래에 만듭니다.(다른 폴더에 만들고 가져오기 코드에서 경로를 수정해도 됩니다.)
A001,B001
A002,B002
A003,B003
  • MariaDB에서 csv_import라는 테이블을 만듭니다.
create table csv_import ( A varchar(100), B varchar(100) );
  • 다음과 같이 명령하여 ab.csv의 데이터를 가져옵니다.
  • terminated by ',' : 쉼표를 기준으로 열을 구분한다는 뜻입니다.
  • lines terminated by '\n' : 줄바꿈을 기준으로 행을 구분한다는 뜻입니다.
load data local infile '/root/ab.csv' into table csv_import fields terminated by ',' lines terminated by '\n';
  • 잘 가져왔는지 확인합니다.
select * from csv_import;
+------+------+
| A    | B    |
+------+------+
| A001 | B001 |
| A002 | B002 |
| A003 | B003 |
+------+------+

데이터에 쉼표가 있는 경우

  • CSV는 comma-separated values의 약자입니다. 즉, 쉼표로 데이터를 구분합니다. 그런데 데이터 자체에 쉼표가 있으면 문제가 생깁니다.
  • 예를 들어 CSV의 내용이 다음과 같은 경우...
A00,1,B001
A002,B002
A003,B003
  • 경고가 만들어지고...
load data local infile '/root/ab.csv' into table csv_import fields terminated by ',' lines terminated by '\n';
Query OK, 3 rows affected, 1 warning (0.00 sec)
Records: 3 Deleted: 0 Skipped: 0 Warnings: 1
  • 원하는 결과가 나오지 않습니다.
select * from csv_import;
+------+------+
| A    | B    |
+------+------+
| A00  | 1    |
| A002 | B002 |
| A003 | B003 |
+------+------+

방법 1

  • 쉼표를 포함한 데이터를 큰 따옴표로 감쌉니다.
"A00,1",B001
A002,B002
A003,B003
  • enclosed by '"'를 추가하여 데이터를 가져옵니다.
load data local infile '/root/ab.csv' into table csv_import fields terminated by ',' enclosed by '"' lines terminated by '\n';

방법 2

  • 열을 구분하는 쉼표를 다른 문자로 변경하고...
A00,1|B001
A002|B002
A003|B003
  • fields terminated by의 문자열을 변경하여 가져옵니다.
load data local infile '/root/ab.csv' into table csv_import fields terminated by '|' lines terminated by '\n';

일부 열만 추가하는 경우

  • 테이블에 열은 여러 개 있는데, CSV 파일에 열이 하나라면...
A001
A002
A003
  • 파일을 가져올 때 경고가 뜨고...
load data local infile '/root/ab.csv' into table csv_import fields terminated by ',' lines terminated by '\n';
Query OK, 3 rows affected, 3 warnings (0.00 sec)
Records: 3 Deleted: 0 Skipped: 0 Warnings: 3
  • 첫번째 열에 데이터가 들어갑니다.
select * from csv_import;
+------+------+
| A    | B    |
+------+------+
| A001 | NULL |
| A002 | NULL |
| A003 | NULL |
+------+------+
  • 만약 테이블의 B열에 데이터를 넣고 싶다면, 쉼표를 추가하거나...
,B001
,B002
,B003
select * from csv_import;
+------+------+
| A    | B    |
+------+------+
|      | B001 |
|      | B002 |
|      | B003 |
+------+------+
  • 쉼표 없이 만든 후...
B001
B002
B003
  • 데이터가 들어갈 열을 지정합니다.
  • CSV 파일의 첫번째 열의 이름을 @csv1로 정한 후, B열에 넣으라는 뜻입니다.
load data local infile '/root/ab.csv' into table csv_import fields terminated by ',' lines terminated by '\n' ( @csv1 ) set B = @csv1;
select * from csv_import;
+------+------+
| A    | B    |
+------+------+
| NULL | B001 |
| NULL | B002 |
| NULL | B003 |
+------+------+

Related Posts

MariaDB / Query / LEFT JOIN, RIGHT JOIN, INNER JOIN

MariaDB / Query / LEFT JOIN, RIGHT JOIN, INNER JOIN

JOIN SQL의 JOIN은 여러 테이블을 한 번에 나타낼 때 사용합니다. 대표적인 JOIN 방식은 LEFT JOIN, RIGHT JOIN, INNER JOIN이 있습니다. 다음은 세 가지 JOIN의 차이를 알아보기 위한 간단한 예제 테이블입니다. A 테이블에는 나라, B 테이블에는 도시가 있습니다. 도시가 어떤 나라의 도시인지는 a_no로 확인합니다. 나라는 있는데 도시가 없는 것도 있고, 나라는 없는데 도시는 있는 것도 있습니다. A ...

MariaDB / Query / DISTINCT / 중복 데이터 제거

MariaDB / Query / DISTINCT / 중복 데이터 제거

DISTINCT를 이용하면 중복 값을 제거할 수 있습니다. 예를 들어 다음과 같은 test 테이블이 있다고 할 때... SELECT * FROM test; +---------+---------+---------+ | Column1 | Column2 | Column3 | +---------+---------+---------+ | 1 | A | 1 | | ...

MariaDB / Query / 주석

MariaDB / Query / 주석

MariaDB의 쿼리문에서 주석을 만드는 방법은 세 가지가 있습니다. 한 줄 주석 한 줄 주석을 만들고 싶다면 # 또는 --를 사용합니다. 기호가 있는 다음부터 줄 끝까지가 주석이 됩니다. # Comment -- Comment 여러 줄 주석 여러 줄의 주석을 만들고 싶다면 /* */를 사용합니다. /* Comment Comment */

MariaDB / DATA / 데이터 추가(INSERT), 수정(UPDATE), 삭제(DELETE)

MariaDB / DATA / 데이터 추가(INSERT), 수정(UPDATE), 삭제(DELETE)

데이터베이스와 테이블 만들기 test 데이터베이스를 만듭니다. MariaDB > create database test; Query OK, 1 row affected (0.00 sec) test 데이터베이스를 사용합니다. MariaDB > use test; Database changed table_1 테이블을 만듭니다. MariaDB > CREATE TABLE table_1 ( -> column_1 varchar(100), -> column_2 varchar(100), -> column_3 varchar(100) -> ...

MariaDB / 함수 / LENGTH, BIT_LENGTH, CHAR_LENGTH / 문자열 길이 출력하는 함수

MariaDB / 함수 / LENGTH, BIT_LENGTH, CHAR_LENGTH / 문자열 길이 출력하는 함수

LENGTH LENGTH는 바이트(byte)로 계산된 문자열의 길이를 출력합니다. 영어. 숫자, 특수문자 등은 1로, 한글은 3으로 계산합니다. SELECT LENGTH( 'A1#가' ); +--------------------+ | LENGTH( 'A1#가' ) | +--------------------+ | 6 | +--------------------+ BIT_LENGTH BIT_LENGTH는 비트(bit)로 계산된 문자열의 길이를 출력합니다. 영어, 숫자, 특수문자 등은 ...

MariaDB / Query / UNION, UNION ALL

MariaDB / Query / UNION, UNION ALL

UNION 또는 UNION ALL을 이용하면 여러 테이블의 데이터를 합하여 출력할 수 있습니다. 예를 들어 다음과 같은 테이블과... SELECT * FROM test_1; +-------+-------+-------+ | col_1 | col_2 | col_3 | +-------+-------+-------+ | 1 | A | 1 | | 2 | ...

MariaDB / Query / EVENT / 만들기, 수정하기, 삭제하기

MariaDB / Query / EVENT / 만들기, 수정하기, 삭제하기

EVENT를 사용하기 위한 설정 방법 1 50-server.cnf에 다음 코드를 추가하고 MariaDB를 다시 시작한다. 영구적으로 적용된다. event_scheduler = ON 방법 2 다음과 같이 설정한다. 단, MariaDB를 다시 시작하면 OFF로 변경된다. SET GLOBAL event_scheduler = ON; 설정 상태 확인 SHOW variables LIKE 'event%'; +-----------------+-------+ | Variable_name | Value | +-----------------+-------+ | event_scheduler | ON | +-----------------+-------+ EVENT 만들기 이벤트 이름 : EVENT_TEST 이벤트 ...

MariaDB / 함수 / COUNT, SUM, AVG, MAX, MIN

MariaDB / 함수 / COUNT, SUM, AVG, MAX, MIN

예제로 사용한 데이터베이스는 employees입니다. COUNT COUNT는 특정 조건을 만족하는 행의 개수를 세는 함수입니다. employees 테이블의 전체 행 개수를 구합니다. 의미 상 전체 직원 수를 구하는 것입니다. SELECT COUNT( * ) AS Count FROM employees ; +----------+ | Count | +----------+ | 300024 | +----------+ WHERE를 이용하여 조건을 추가할 수 있습니다. 다음은 남자 직원의 수를 구하는 쿼리입니다. SELECT ...

MariaDB / VIEW / 만들기, 수정하기, 삭제하기

MariaDB / VIEW / 만들기, 수정하기, 삭제하기

예제로 사용한 데이터베이스는 employees이다. VIEW VIEW는 SELECT의 결과를 테이블처럼 사용할 수 있게 해준다. 반복되는 쿼리를 대체하거나, 민감한 정보를 숨기고 싶을 때 사용한다. VIEW 만들기 CREATE VIEW 예를 들어 남자인 직원의 first_name과 last_name을 VIEW로 만든다고 하자. 우선 VIEW로 만들 데이터를 추출하는 쿼리를 만든다. SELECT first_name, last_name FROM employees WHERE gender = 'M' ; CREATE VIEW로 VIEW를 만든다. v_employees_male는 VIEW의 이름으로, 적절히 ...

MariaDB / Query / GROUP BY

MariaDB / Query / GROUP BY

예제로 사용한 데이터베이스는 employees입니다. GROUP BY를 사용하면 공통 데이터를 갖고 있는 행들을 집계할 수 있습니다. 예를 들어 사번이 10001인 사원의 급여 지급 내역을 알고 싶다면 다음과 같이 쿼리합니다. SELECT emp_no, salary FROM salaries WHERE emp_no = 10001; +--------+--------+ | emp_no | salary | +--------+--------+ | 10001 | 60117 | | 10001 | 62102 | | ...