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 |
+------+------+
같은 카테고리의 다른 글
MariaDB / DATABASE / 만들기, 삭제하기, 이름 변경하기

MariaDB / DATABASE / 만들기, 삭제하기, 이름 변경하기

데이터베이스 조회 데이터베이스 목록을 조회한다. SHOW DATABASES; 데이터베이스 만들기 test라는 이름의 데이터베이스를 만든다. CREATE DATABASE test; 이미 존재하는 데이터베이스와 같은 이름의 데이터베이스를 만들려고 하면 에러가 난다. 같은 이름의 데이터베이스가 존재하지 않을 때만 만들고 싶다면 IF NOT EXISTS를 추가한다. CREATE DATABASE IF NOT EXISTS test; 마침표 등 특별한 문자를 포함하는 경우에 에러가 난다. 억음 부호로 이름을 감싸면 에러가 나지 않는다. CREATE DATABASE ...

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

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

EVENT를 사용하기 위한 설정 방법 1 다음과 같이 명령한다. MariaDB를 다시 시작하면 OFF로 변경된다. SET GLOBAL event_scheduler = ON; 방법 2 환경 설정 파일(Ubuntu Server라면 50-server.cnf, Rocky Linux라면 mariadb-server.cnf)에 다음 코드를 추가하고 MariaDB를 다시 시작한다. 영구적으로 적용된다. event_scheduler = ON 설정 상태 확인 SHOW variables LIKE 'event%'; +-----------------+-------+ | Variable_name | Value | +-----------------+-------+ | event_scheduler | ON | +-----------------+-------+ EVENT ...

MariaDB / Query / WHERE

MariaDB / Query / WHERE

예제로 사용한 데이터베이스는 employees이다. WHERE를 이용하면 조건에 맞는 데이터만 추출할 수 있다. 예를 들어 다음과 같이 쿼리하면 gener가 M인 경우 1을 반환하는데... SELECT first_name, gender, gender = 'M' FROM employees LIMIT 10 ; +------------+--------+--------------+ | first_name | gender | gender = 'M' | +------------+--------+--------------+ | Georgi | M ...

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 / 피벗 테이블 만들기

MariaDB / 피벗 테이블 만들기

피벗 테이블은 엑셀의 유용한 기능 중의 하나이다. 예를 들어 아래의 왼쪽 데이터를 오른쪽 표처럼 만드는 것이 피벗 테이블이다. 조건에 따라 그룹화시켜서 보기 좋게 데이터를 정리하는 것이라 보면 된다. MariaDB에서도 몇 가지 함수를 이용하여 피벗 테이블을 만들 수 있다. 테이블의 이름이 pivot이라 가정하면, 아래처럼 쿼리를 짜면 된다. SELECT company , ...

MariaDB / SELECT 결과를 INSERT하는 방법

MariaDB / SELECT 결과를 INSERT하는 방법

Z_1 테이블에서 a, b, c 열의 데이터를 Z_2 테이블의 x, y, z 열에 삽입한다고 하자. 우선 Z_1 테이블에서 a, b, c 열의 데이터를 가져오는 쿼리를 만든다. SELECT a, b, c FROM Z_1 ; 그 위에 INSERT를 추가한다. INSERT INTO Z_2 ( x, y, z ) SELECT a, b, ...

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 / 연산자 / 비교 연산자

MariaDB / 연산자 / 비교 연산자

MariaDB의 비교 연산자에 대하여 알아본다. 예제로 사용하는 테이블은 아래의 데이터를 가진 T_1이라는 테이블이다. C_1의 데이터 형식은 정수, C_2의 데이터 형식은 문자, C_3의 데이터 형식은 날짜이다. +----+------+------+------------+ | ID | C_1 | C_2 | C_3 | +----+------+------+------------+ | 1 | 1 | A ...

MariaDB / 샘플 데이터베이스 employees 설치하기

MariaDB / 샘플 데이터베이스 employees 설치하기

데이터베이스를 다루는 공부를 할 때 데이터가 들어있는 데이터베이스가 있으면 좋다. 데이터베이스를 직접 만드는 방법도 있지만, 공개된 샘플 데이터베이스를 이용하면 편하다. MariaDB라면 test_db를 사용하면 된다. 다음은 MariaDB에 test_db를 설치하는 방법이다. GitHub에 있는 test_db 페이지에 접속한다. Clone or download를 클릭한 다음 다운로드한다. 서버에 업로드한 다음 압축을 푼다. employees.sql가 있는 폴더에서 다음과 같이 명령하여 데이터베이스를 설치한다. mysql -u root ...

MariaDB / 함수 / LIKE

MariaDB / 함수 / LIKE

다음과 같은 테이블이 있습니다. 열의 이름은 column1, 데이터는 12345, 23456 두 개가 있습니다. MariaDB > SELECT * FROM table1; +---------+ | column1 | +---------+ | 12345 | | 23456 | +---------+ WHERE를 이용하면 특정 값을 갖는 행을 출력할 수 있습니다. 예를 들어 다음은 column1의 값이 12345인 데이터를 출력합니다. MariaDB > SELECT * FROM table1 WHERE ...