텍스트 파일에서 mysql 데이터베이스로 데이터를 가져오는 방법
350MB 파일을 가지고 있습니다.text_file.txt
이 탭으로 구분된 데이터가 포함되어 있습니다.
345868230 1646198120 1531283146 Keyword_1531283146 1.55 252910000
745345566 1646198120 1539847239 another_1531276364 2.75 987831000
...
MySQL 데이터베이스 이름:Xml_Date
데이터베이스 테이블:PerformanceReport
모든 대상 필드가 포함된 테이블을 이미 만들었습니다.
이 텍스트 파일 데이터를 MySQL로 가져오고 싶습니다.검색해보니 다음과 같은 명령어가 있더군요.LOAD DATA INFILE
사용법에 대한 혼란이 컸습니다.
이 텍스트 파일 데이터를 가져오려면 어떻게 해야 합니까?
그건 아주 간단해...
LOAD DATA INFILE '/tmp/mydata.txt' INTO TABLE PerformanceReport;
디폴트LOAD DATA INFILE
탭으로 구분된 행이 한 줄에 하나씩 사용되므로 올바르게 입력할 수 있습니다.
MySQL의 LOAD DATA 명령을 사용하는 방법에 대한 설명:
테이블을 만듭니다.
CREATE TABLE foo(myid INT, mymessage VARCHAR(255), mydecimal DECIMAL(8,4));
탭으로 구분된 파일을 만듭니다(열 사이에 탭이 있습니다.
1 Heart disease kills 1.2 2 one out of every two 2.3 3 people in America. 4.5
load data 명령을 사용합니다.
LOAD DATA LOCAL INFILE '/tmp/foo.txt' INTO TABLE foo COLUMNS TERMINATED BY '\t';
이 명령을 실행할 수 없다는 경고가 표시되면
--local-infile=1
파라미터는 다음과 같습니다.MySQL 로드 오류를 수정하는 방법행이 삽입됩니다.
Query OK, 3 rows affected (0.00 sec) Records: 3 Deleted: 0 Skipped: 0 Warnings: 0
동작했는지 확인합니다.
mysql> select * from foo; +------+----------------------+-----------+ | myid | mymessage | mydecimal | +------+----------------------+-----------+ | 1 | Heart disease kills | 1.2000 | | 2 | one out of every two | 2.3000 | | 3 | people in America. | 4.5000 | +------+----------------------+-----------+ 3 rows in set (0.00 sec)
텍스트 파일 열을 로드할 열을 지정하는 방법:
다음과 같이 합니다.
LOAD DATA LOCAL INFILE '/tmp/foo.txt' INTO TABLE foo
FIELDS TERMINATED BY '\t' LINES TERMINATED BY '\n'
(@col1,@col2,@col3) set myid=@col1,mydecimal=@col3;
파일 내용은 변수 @col1, @col2, @col3에 들어갑니다.myid는 열1, mydecimal은 열3을 가져옵니다.이 명령을 실행하면 두 번째 행이 생략됩니다.
mysql> select * from foo;
+------+-----------+-----------+
| myid | mymessage | mydecimal |
+------+-----------+-----------+
| 1 | NULL | 1.2000 |
| 2 | NULL | 2.3000 |
| 3 | NULL | 4.5000 |
+------+-----------+-----------+
3 rows in set (0.00 sec)
테이블이 탭이 아닌 다른 탭으로 구분되어 있는 경우 다음과 같이 지정해야 합니다.
LOAD DATA LOCAL
INFILE '/tmp/mydata.txt' INTO TABLE PerformanceReport
COLUMNS TERMINATED BY '\t' ## This should be your delimiter
OPTIONALLY ENCLOSED BY '"'; ## ...and if text is enclosed, specify here
LOAD DATA INFILE 문은 텍스트 파일의 행을 매우 빠른 속도로 테이블로 읽습니다.
LOAD DATA INFILE '/tmp/test.txt'
INTO TABLE test
FIELDS TERMINATED BY ','
LINES STARTING BY 'xxx';
데이터 파일이 다음과 같은 경우:
xxx"abc",1
something xxx"def",2
"ghi",3
결과 행은 ("abc", 1) 및 ("def", 2)가 됩니다.파일의 세 번째 행에는 접두사가 포함되어 있지 않기 때문에 건너뜁니다.
LOAD DATA INFILE 'data.txt'
INTO TABLE tbl_name
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
LINES TERMINATED BY '\r\n'
mysqlimport 유틸리티를 사용하여 데이터 파일을 로드할 수도 있습니다.이 유틸리티는 LOAD DATA INFILE 문을 서버에 송신하는 것으로 동작합니다.
mysqlimport -u root -ptmppassword --local test employee.txt
test.employee: Records: 3 Deleted: 0 Skipped: 0 Warnings: 0
다음의 옵션을 설정할 필요가 있습니다.
local-infile=1
my.cnf 파일 또는 --local-infile 옵션을 사용하여 mysql 클라이언트의 [my.cnf]엔트리로 이행합니다.
mysql --local-infile -uroot -pyourpwd yourdbname
"로컬 파일" 기능 서버 측을 활성화하려면 [mysqld] 섹션에도 동일한 매개 변수가 정의되어 있는지 확인해야 합니다.
보안 제한 사항입니다.
LOAD DATA LOCAL INFILE '/softwares/data/data.csv' INTO TABLE tableName;
LOAD DATA INFILE '/home/userlap/data2/worldcitiespop.txt' INTO TABLE cc FIELDS TERMINATED BY ','LINES TERMINATED BY '\r \n' IGNORE 1 LINES;
- 열 이름을 포함하는 첫 번째 헤더 행을 건너뛰려면 1개의 라인을 무시하십시오.
- '로 끝나는 필드', 쉼표로 구분된 파일을 읽습니다.
- Windows 시스템에서 텍스트 파일을 생성한 경우 Windows 프로그램은 일반적으로 두 문자를 줄 바꿈으로 사용하기 때문에 파일을 제대로 읽으려면 LINES TERMINATED BY '\r\n'을 사용해야 합니다.워드패드 등 일부 프로그램에서는 파일을 쓸 때 \r을 줄 바꿈으로 사용할 수 있습니다.이러한 파일을 읽으려면 '\r'로 종단된 LINES를 사용하십시오.
"LOCAL" 키워드를 추가하면 문제가 해결됩니다.첨부한 이미지를 참조해 주세요.
첨부된 이미지에는 두 가지 사용 사례가 포함되어 있습니다.
(a) 이 에러가 발생한 장소. (b) "Local" 키워드를 추가하는 것만으로 에러가 해결된 장소.
Local-Infile 변수가 True(ON)로 설정되어 있는지 확인합니다.
mysql> show global variables like 'local_infile'; +---------------+-------+ | Variable_name | Value | +---------------+-------+ | local_infile | OFF | +---------------+-------+ 1 row in set (0.04 sec) mysql> set global local_infile=true; Query OK, 0 rows affected (0.01 sec)
SQL 테이블에 로드할 txt 파일을 저장할 올바른 경로 찾기
mysql> SELECT @@GLOBAL.secure_file_priv; +------------------------------------------------+ | @@GLOBAL.secure_file_priv | +------------------------------------------------+ | C:\ProgramData\MySQL\MySQL Server 8.0\Uploads\ | +------------------------------------------------+ 1 row in set (0.00 sec)
경로에서 데이터 인파일을 사용하여 로드(경로에서 후방 슬래시 사용
mysql> load data infile 'C:/ProgramData/MySQL/MySQL Server 8.0/Uploads/text_file.txt' into table TABLE_NAME fields terminated by '\t' lines terminated by '\n';
1. 탭으로 구분된 txt 파일인 경우:
데이터 로컬 파일 'D:/MySQL/이벤트를 로드합니다.txt' INTO TABLE 이벤트
'\r\n'로 끝나는 회선;
2. 그 이외의 경우:
데이터 로컬 파일 'D:/MySQL/이벤트를 로드합니다.txt' INTO TABLE 이벤트
'x'로 끝나는 필드(여기서 x는 쉼표 '', 탭 '\t', 세미콜론 ';', 공백 ')
'\r\n'로 끝나는 회선;
언급URL : https://stackoverflow.com/questions/13579810/how-to-import-data-from-text-file-to-mysql-database
'itsource' 카테고리의 다른 글
JavaScript를 사용하여 전체 경로에서 파일 이름을 가져오려면 어떻게 해야 합니까? (0) | 2022.09.17 |
---|---|
pip을 사용하여 Python MySQLdb 모듈을 설치하는 방법 (0) | 2022.09.17 |
해당 함수 내에서 함수 이름 결정(트레이스백을 사용하지 않음) (0) | 2022.09.17 |
Java에서 긴 정수를 구분 없이 문자열로 포맷하려면 어떻게 해야 합니까? (0) | 2022.09.17 |
Python 문자열에서 마지막 구분 기호로 분할하시겠습니까? (0) | 2022.09.17 |