2016-10-25 3 views
0

약 60m 행의 크기가 20gigs 인 CSV 파일이 있는데, 이는 mysql 내에서 테이블에로드하고 싶습니다.은 mysql에 csv 파일을 효율적으로로드합니다.

로드를 시작하기 전에 복합 기본 키 (col_a, col_b)으로 내 테이블을 정의했습니다.

내가 아래로 내 부하를 시작 한 다음 데이터 세트의 크기가 10g 주위에 도착 할 때까지,이 잘 작동하는 것 같았다

LOAD DATA LOCAL INFILE '/mypath/mycsv.csv' 
INTO TABLE mytable 
FIELDS TERMINATED BY ',' 
LINES TERMINATED BY '\n' 
IGNORE 0 LINES 
(@v1v, @v2v, @v3v, @v4v, @v5v, etc...) 
SET 
col_a = nullif(@v1v,''), 
col_b = nullif(@v2v,''), 
col_c = nullif(@v3v,''), 
col_d = nullif(@v4v,''), 
col_e = nullif(@v5v,''), 
etc..., 
load_dttm = NOW(); 

하는로드 포인트는 크게 둔화, 어떤는 수도처럼 보였다 밤새도록 1 시간 정도 걸렸고 훨씬 더 커지지 않았습니다.

"큰"csv를 mysql에로드하는 더 효율적인 방법이 있습니까 (이 단어의 정의에 따라 다름).

내 즉각적인 생각은 다음과 같습니다

1) 내 복합 기본 키를 제거 만로드 2) 내가 알고있는 것처럼 작은 조각

에 CSV를 분해해야 후 적용해야 mysql은 주로 시스템 제약 조건에 의해 제한됩니다. 필자의 경우에는 문제가되어서는 안됩니다. Linux Red Hat 서버에서 "MemTotal : 396779348 kB"를 사용하고 있습니다! 그리고 테라 바이트의 공간.

이것은 처음으로 mysql을 사용했기 때문에 모든 답변에이 점을 명심하십시오.

답변

0

내 문제는 충분한 공간이 할당되지 않은/var/lib/mysql 디렉토리 때문이었습니다. 로드 데이터 명령을 처리 할 때 공간이 낮아지면 mysql이 오류를 발생시키는 대신 속도가 느려지는 것 같습니다. 이 문제를 해결하기 위해 datadir을 How to change MySQL data directory?

관련 문제