Computer >> 컴퓨터 >  >> 프로그래밍 >> MySQL

한 줄에 구분자가 포함된 텍스트 파일 데이터를 MySQL 테이블로 가져오는 방법

텍스트 파일의 여러 레코드를 한 줄에 작성하되, 각 레코드 사이에 특정 구분 기호(separator)를 사용하는 것이 가능합니다. 이런 형식의 텍스트 파일을 MySQL 테이블로 가져올 때는 반드시 'LINES TERMINATED BY' 옵션을 사용해야 합니다. 다음 예제를 통해 자세히 알아보겠습니다.

구분자가 있는 텍스트 파일 예시

아래와 같이 '|' 문자를 줄 종결자(LINE TERMINATOR)로 사용하여 여러 레코드를 한 줄에 저장한 텍스트 파일이 있다고 가정해 보겠습니다.

id,Name,Country,Salary|105,Chum*,Marsh,USA,11000|106,Danny*,Harrison,AUS,12000

LOAD DATA 문으로 데이터 가져오기

이 텍스트 파일을 MySQL 테이블로 가져올 때는 쿼리에 'LINES TERMINATED BY' 옵션을 함께 지정해 주어야 합니다. 아래 쿼리처럼 작성할 수 있습니다.

mysql> LOAD DATA LOCAL INFILE 'd:\A.txt' INTO table employee7_tbl FIELDS TERMINATED BY ',' ESCAPED BY '*' LINES TERMINATED BY '|' IGNORE 1 ROWS;
Query OK, 2 rows affected (0.05 sec)
Records: 2 Deleted: 0 Skipped: 0 Warnings: 0

위 쿼리에서 사용된 각 옵션의 역할은 다음과 같습니다.

  • FIELDS TERMINATED BY ',': 필드(컬럼) 값들이 쉼표(,)로 구분되어 있음을 지정합니다.
  • ESCAPED BY '*': 필드 값 내부에 포함된 쉼표 같은 특수 문자를 이스케이프 처리하기 위해 '*' 문자를 사용함을 지정합니다.
  • LINES TERMINATED BY '|': 한 줄 안에서 각 레코드가 '|' 문자로 구분되어 있음을 지정합니다.
  • IGNORE 1 ROWS: 첫 번째 행은 컬럼 헤더이므로 가져오기를 건너뜁니다.

가져온 데이터 확인하기

데이터가 정상적으로 테이블에 입력되었는지 아래 쿼리로 확인해 보겠습니다.

mysql> Select * from employee7_tbl;
+------+----------------+----------+--------+
| Id   | Name           | Country  | Salary |
+------+----------------+----------+--------+
| 105  | Chum,Marsh     | USA      |  11000 |
| 106  | Danny,Harrison | AUS      |  12000 |
+------+----------------+----------+--------+
2 rows in set (0.00 sec)

출력 결과를 보면, 원본 파일에서 '*'로 이스케이프 처리되어 있던 이름 필드의 쉼표가 'Chum,Marsh', 'Danny,Harrison'으로 올바르게 복원되어 저장된 것을 확인할 수 있습니다. 이처럼 LINES TERMINATED BY 옵션을 활용하면 한 줄에 여러 레코드가 담긴 텍스트 파일도 손쉽게 MySQL 테이블로 가져올 수 있습니다.