텍스트 파일에 라인 접두사(line prefix)가 포함되어 있는 경우, MySQL의 LINES STARTING BY 옵션을 사용하면 해당 접두사를 기준으로 필요한 라인만 골라서 테이블로 가져올 수 있습니다. 이 옵션을 지정하면 접두사가 없는 라인은 자동으로 무시되므로, 원하는 데이터만 정확하게 적재할 수 있습니다. 다음 예제를 통해 자세히 살펴보겠습니다.
예제
텍스트 파일에서 'VALUE:'를 라인 접두사로 사용한다고 가정해 보겠습니다. 파일 내용은 다음과 같습니다.
id, Name, Country, Salary VALUE:105, Chum*, Marsh,USA, 11000 106, Danny*, Harrison,AUS, 12000
이 텍스트 파일을 MySQL 테이블로 가져올 때는 쿼리에 LINES STARTING BY 옵션을 함께 지정해야 합니다.
mysql> LOAD DATA LOCAL INFILE 'd:\A.txt' INTO table employee8_tbl FIELDS TERMINATED BY ',' ESCAPED BY '*' LINES STARTING BY 'Value:' IGNORE 1 ROWS; Query OK, 1 row affected (0.07 sec) Records: 1 Deleted: 0 Skipped: 0 Warnings: 0
실제로 어떤 데이터가 테이블에 들어갔는지 아래 쿼리로 확인해 보겠습니다.
mysql> Select * from employee8_tbl; +------+----------------+----------+--------+ | Id | Name | Country | Salary | +------+----------------+----------+--------+ | 105 | Chum,Marsh | USA | 11000 | +------+----------------+----------+--------+ 1 row in set (0.00 sec)
결과를 보면 하나의 레코드만 테이블에 저장된 것을 알 수 있습니다. 그 이유는 첫 번째 데이터 행 앞에 라인 접두사인 'VALUE:'가 붙어 있지만, 두 번째 행(106)에는 접두사가 없기 때문입니다. MySQL은 접두사가 없는 라인을 모두 무시하고 넘어갑니다.
접두사가 있는 라인 추가하기
이번에는 텍스트 파일에 접두사 'VALUE:'가 붙은 새로운 라인을 하나 더 추가해 보겠습니다.
id, Name, Country, Salary Value:105, Chum*, Marsh,USA, 11000 106, Danny*,Harrison, AUS, 12000 Value:107, Raman*,Kumar, IND, 25000
mysql> LOAD DATA LOCAL INFILE 'd:\A.txt' INTO table employee8_tbl FIELDS TERMINATED BY ',' ESCAPED BY '*' LINES STARTING BY 'Value:' IGNORE 1 ROWS; Query OK, 2 rows affected (0.07 sec) Records: 2 Deleted: 0 Skipped: 0 Warnings: 0
다시 테이블 내용을 확인해 보면 접두사가 붙은 두 개의 레코드가 모두 정상적으로 저장된 것을 볼 수 있습니다.
mysql> Select * from employee8_tbl; +------+----------------+----------+--------+ | Id | Name | Country | Salary | +------+----------------+----------+--------+ | 105 | Chum,Marsh | USA | 11000 | | 107 | Raman,Kumar | IND | 25000 | +------+----------------+----------+--------+ 2 rows in set (0.00 sec)
이처럼 LINES STARTING BY 옵션을 활용하면 지정한 접두사('VALUE:')로 시작하는 라인만 선택적으로 가져올 수 있습니다. 접두사가 없는 라인은 모두 건너뛰기 때문에, 특정 형식의 로그 파일이나 여러 형식이 섞인 데이터 파일에서 필요한 부분만 추출해 적재할 때 매우 유용한 기능입니다.