텍스트 파일의 두 줄 사이에 빈 줄이 존재하면, MySQL은 해당 텍스트 파일을 테이블로 가져오는 과정에서 이 빈 줄도 하나의 데이터 행으로 간주합니다. 즉, 빈 줄이 유효한 데이터가 아니더라도 MySQL은 이를 데이터 라인으로 평가하여 테이블에 삽입합니다.
다음 예시를 통해 이를 쉽게 이해할 수 있습니다.
예제
텍스트 파일 'A.txt'의 두 줄 사이에 다음과 같이 빈 줄이 있다고 가정해 보겠습니다.
105,Chum,USA,11000 106,Danny,AUS,12000
이제 아래와 같은 쿼리를 작성하여 텍스트 파일의 데이터를 MySQL 테이블로 가져올 수 있습니다.
mysql> LOAD DATA LOCAL INFILE 'd:\A.txt' INTO table employee10_tbl FIELDS TERMINATED BY ','; Query OK, 3 rows affected, 4 warnings (0.05 sec) Records: 3 Deleted: 0 Skipped: 0 Warnings: 4
위 쿼리 결과를 보면 총 3개의 행이 업로드되었고, 4개의 경고(warnings)가 발생했음을 알 수 있습니다. 실제로 어떤 데이터가 업로드되었는지는 다음 쿼리로 확인할 수 있습니다.
mysql> Select * from employee10_tbl; +------+----------------+----------+--------+ | Id | Name | Country | Salary | +------+----------------+----------+--------+ | 105 | Chum | USA | 11000 | | 0 | NULL | NULL | NULL | | 106 | Danny | AUS | 12000 | +------+----------------+----------+--------+ 3 rows in set (0.00 sec)
위 결과 집합을 보면, MySQL이 두 줄 사이의 빈 줄을 하나의 데이터 값으로 평가하여 해당 행의 숫자형 컬럼에는 0, 문자열 컬럼에는 NULL을 삽입한 것을 확인할 수 있습니다.
정리 및 주의 사항
이처럼 LOAD DATA 문을 사용할 때는 원본 텍스트 파일에 불필요한 빈 줄이 포함되어 있지 않은지 반드시 확인해야 합니다. 빈 줄이 있으면 의미 없는 더미 행이 테이블에 추가되고 경고가 발생하며, 이후 데이터 정합성 검증이나 집계 작업 시 오류의 원인이 될 수 있습니다.
빈 줄로 인한 문제를 방지하려면 다음과 같은 방법을 활용하는 것이 좋습니다.
- 파일을 가져오기 전에 편집기나 스크립트로 빈 줄을 미리 제거
- 가져온 후
DELETE FROM 테이블명 WHERE 컬럼 IS NULL;같은 조건문으로 더미 행 삭제 - 데이터 양이 많다면 임시 테이블에 먼저 적재한 뒤 검증하고 최종 테이블로 옮기는 방식 사용