반응형
[2021.07.23] MySQL에 1분 내로 대용량 데이터 CSV File 업로드 방법?
1. 우선, csv 파일을 다운 받는다
2. 해당 파일을 아스키코드(.excel)로 workbench를 통해, 자동으로 테이블 과 컬럼(속성)을 만든다
-> 여기서, 아스키코드가 아니라면 editplus를 통해, utf-8 -> ASCII로 인코딩 해준다
3. 2번에서 업로드후 10~20초후에 종료한다
-> 자동으로 테이블과 컬럼을 setting 하기 위한 작업이기 때문이다.
-> 그런후 truncate로 데이터를 모두 삭제한다
4. workbench에서, num이라는 필드를 추가하면서 , PK,NN,AI를 Select 후, apply를 눌러준다(auto_increment)
5. 파일질라(FTP)
-> 해당 아스키코드(.excel) 파일을 editplus를 이용하여, UTF-8(.csv)로 변환하여, 파일 전송
mysql --local-infile=1 -u root -p
-> mysql 접속
LOAD DATA LOCAL INFILE "/home/ubuntu/data/0720_허리둘레.csv" INTO TABLE DATA.waist FIELDS TERMINATED BY "," IGNORE 1 LINES
-> LOAD DATA를 통해 데이터 삽입
* conf 파일로 db data -> logstash에 전송할 때
output -> elasticsearch -> document_id => {4번에서 설정한 num}으로 설정 해야 데이터가 중복으로 들어가지지 않음
input {
jdbc {
jdbc_driver_library => "/usr/share/java/mysql-connector-java-8.0.25.jar"
jdbc_driver_class => "com.mysql.jdbc.Driver"
jdbc_connection_string => "jdbc:mysql://localhost:3306/DATA?allowPublicKeyRetrieval=true&useSSL=false&user=root&password=root"
#jdbc_connection_string => "jdbc:mysql://localhost:3306/DATA?useSSL=false&user=root&password=root"
jdbc_user => "root"
jdbc_password => "root"
schedule => "* * * * *"
statement => "select * from waist"
type => "waist"
tracking_column => "table_1"
use_column_value => true
}
}
output {
if[type] == "waist" {
elasticsearch {
hosts => "localhost:9200"
index => "0723_waist"
user => "elastic"
password => "d2L79ArdVSJqbxqATuKj"
document_id => "%{num}"
}
}
stdout {
#codec => dots {}
codec => rubydebug
}
}
반응형
댓글