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 / HeidiSQL / MariaDB에 연결하는 방법

MariaDB / HeidiSQL / MariaDB에 연결하는 방법

HeidiSQL로 MariaDB에 접속해보겠습니다. 만약 다른 기기에 있는 MariaDB라면 통신이 가능하도록 포트가 열려 있어야 합니다. MariaDB의 기본 포트는 3306입니다. HeidiSQL을 실행하면 세션 관리자가 열립니다. 를 클릭합니다. 다음과 같은 화면이 나오는데, 네트워크 유형이 MariaDB or MySQL인 것을 확인하고... 서버 정보를 입력합니다. 세션 이름은 적절히 정하고 합니다. 이제 세션 이름을 더블 클릭하거나, 를 클릭하여 접속할 수 있습니다. 아래는 MariaDB에 접속한 ...

MariaDB / 함수 / INSERT / 일정 구간 문자열 교체하는 함수

MariaDB / 함수 / INSERT / 일정 구간 문자열 교체하는 함수

INSERT는 일정 구간의 문자열을 다른 문자열로 교체하는 함수입니다. INSERT( string, position, length, new-string ) string : 원본 문자열입니다. position : 구간이 시작하는 위치입니다. length : 구간의 길이입니다. new-string : 교체될 문자열입니다. 예를 들어 다음과 같은 경우, 1234567에서 4번째 문자부터 2개를 지우고 ABC를 넣습니다. 즉, 45를 지우고 ABC를 넣습니다. MariaDB > SELECT INSERT( '1234567', 4, 2, 'ABC' ...

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

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

테이블 만들기 test 데이터베이스를 만듭니다. MariaDB > CREATE DATABASE test; Query OK, 1 row affected (0.00 sec) test 데이터베이스를 사용합니다. MariaDB > USE test; Database changed table1을 만듭니다. 열이 하나도 없으면 테이블이 만들어지지 않으므로, 적어도 하나 이상의 열을 만듭니다. MariaDB > CREATE TABLE table1 ( column1 VARCHAR(100) ); Query OK, 0 rows affected (0.35 sec) 테이블이 만들어졌는지 확인합니다. MariaDB > SHOW ...

MariaDB / 함수 / FORMAT / 숫자 세 자리마다 쉼표(콤마) 찍는 함수

MariaDB / 함수 / FORMAT / 숫자 세 자리마다 쉼표(콤마) 찍는 함수

FORMAT은 숫자 세 자리마다 쉼표(콤마) 찍는 함수이다. 예를 들어 다음은 123456789에서 세 자리마다 쉼표를 넣는다. MariaDB > SELECT FORMAT(123456789, 0) as Money; +-------------+ | Money | +-------------+ | 123,456,789 | +-------------+ 값이 숫자 형식이 아니어도 가능하다. MariaDB > SELECT FORMAT('123456789', 0) as Money; +-------------+ | Money | +-------------+ | 123,456,789 | +-------------+ 0이 뜻하는 ...

MariaDB / 함수 / LIKE

MariaDB / 함수 / LIKE

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

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

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

LOAD DATA INFILE MariaDB의 LOAD DATA INFILE로 텍스트 파일의 데이터를 가져올 수 있습니다. 문법은 다음과 같습니다. LOAD DATA INFILE 'file_name' INTO TABLE tbl_name [{FIELDS | COLUMNS} ...

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

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

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

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 / 함수 / SUBSTRING, SUBSTRING_INDEX / 문자열 추출하는 함수

MariaDB / 함수 / SUBSTRING, SUBSTRING_INDEX / 문자열 추출하는 함수

SUBSTRING 12345678의 5번째부터 끝까지 문자열을 추출합니다. SELECT SUBSTRING( '12345678', 5 ); +----------------------------+ | SUBSTRING( '12345678', 5 ) | +----------------------------+ | 5678 | +----------------------------+ SELECT SUBSTRING( '12345678' FROM 5 ); +--------------------------------+ | SUBSTRING( '12345678' FROM 5 ) | +--------------------------------+ | 5678 ...

MariaDB / 함수 / REPLACE / 문자열 찾아서 바꾸는 함수

MariaDB / 함수 / REPLACE / 문자열 찾아서 바꾸는 함수

REPLACE는 특정 문자열을 찾아 다른 문자열로 바꾸는 함수입니다. REPLACE( string, from_string, to_string ) string : 찾아서 바꾸는 대상이 되는 문자열 from_string : 찾을 문자열 to_string : 교체될 문자열 아래는 ababab에서 b를 찾아 c로 바꾸는 예제입니다. SELECT REPLACE( 'ababab', 'b', 'c' ); +-------------------------------+ | REPLACE( 'ababab', 'b', 'c' ) | +-------------------------------+ | acacac ...