2011-10-26 1 views
3

현재 MySQL 데이터베이스로 가져올 CSV 수가 많습니다. 파일은 (예를 들어)의 형식은 각 레코드에 대한 타임 스탬프를 포함 :MySQL CSV 가져 오기 - 타임 스탬프에 밀리 초가있는 경우 0000-00-00 00:00:00으로 입력 한 날짜?

2011-10-13 09:36:02.297000000 

내가 날짜 필드에 저장 밀리 초는 지원하지 않음을 나타냅니다 MySQL의 버그 # 8523, 알고있다. 그럼에도 불구하고, 공백으로 입력하는 대신 초 단위로 레코드를 자르도록 datetime 필드를 예상했습니다. (csv로 등의 서식 반대)

나는

2011-10-13 09:36:02 

수입 올바르게 때문에, 밀리 세컨드에 문제를 좁혀왔다.

아무도이 데이터를 0없이 가져올 수있는 방법을 제안 할 수 있습니까? 각 수동으로 이동하고 타임 스탬프의 길이/서식을 조정할 너무 많은 CSV가 있습니다.

밀리 세컨드는 좋지만 응용 프로그램에는 필요하지 않으므로 숫자를 자르고 가져올 수있는 솔루션이 만족 스럽습니다.

감사합니다.

편집 : - 내가 가져 50m 주위가하는하지에 각각의 라인을 읽는 레코드를 가져 오기위한 매우 빠른

mysqlimport --fields-enclosed-by="" --fields-terminated-by="," --lines-terminated-by="\n" --columns=id,@x,Pair,Time -p --local gain [file].csv 

이것은 : 나는 다음과 같은 명령을 사용하여 CSV를 가져 오기하고, 명확히하기 위해 훌륭한 옵션.

+0

CSV를 어떻게 가져 오나요? –

+0

가져 오기 명령을 포함하도록 질문을 업데이트했습니다. mysqlimport --fields-enclosed-by = ""-fields-terminated-by = ","- lines-terminated-by = "\ n"--columns = id, –

답변

2

CSV 가져 오기 방법을 모르지만 각 파일을 읽거나 (초당 시간 스탬프를 잘라내어 INSERT 문을 실행하는) 스크립트 (php/perl)를 작성하는 것입니다. 데이터베이스.

<?php 
$file=fopen("your.csv","r"); 
mysql_connect ($ip, $user, $pass); 

while(!feof($file)) 
{ 
    $line = explode(',',fgets($file)); 
    mysql_query("INSERT INTO TABLE1 (ID, DATE) values (".$line[0].", ".substr($line[1],0,19).")"); 
} 
fclose($file); 
?> 

같은

뭔가 명령 줄에서이 작업을 실행하고이 작업 밀리 초를 사용하는 경우 그것은 가져올 것

+0

다음과 같이 MySQLImport 명령을 사용하고 있습니다. @ x, Pair, Time -p - 로컬 게인 [파일] .csv. 나는 약 50m 레코드를 가져올 수 있으므로 각 라인을 읽는 것은 실제로 옵션이되지는 않습니다 (mysqlimport는 매우 빠름). –

+0

위와 같은 스크립트를 사용해보십시오. '2011-10-13 09 : 36 : 02.297000000'문자열을 처음 19 자 ("2011-10-13 09:36:02")로 자릅니다. –

+0

나는 모든 CSV를 함께 모으고'awk -F ',''{print $ 1 ","$ 2 ","$ 3 ","substr ($ 4,0,19) ","$ 5 " "$ 6} '2011octwk2.csv> TickPrices.csv' - 완벽하게 작동했으며 거의 ​​50m 기록에서 10 분 미만이 걸렸습니다. –

0

을해야하지만하지 않고 가져 오기를 수행합니다. 그래서 여러분은 한 방향으로 또는 다른 방향으로 부분 문자열을 사용해야합니다. MySQL에는 SUBSTRING과 같은 다양한 문자열 함수가 있습니다. 매번 정확히 동일한 위치에서 밀리 초를 잘라야하기 때문에 사용할 수 있습니다.

그러나이 쿼리를 수행 할 때 사용합니다. 조회를 수정할 수 없으면 자동으로 수행되기 때문에 조회를 프로세스에 추가하고 먼저 데이터를 변경 한 다음 데이터베이스에 추가 할 수 있습니다. 간단한 스크립트는 csv를 읽거나, 변경하거나, 다시 쓰거나, 직접 쿼리를 수행 할 수 있습니다.

+0

위의 일부 의견과 편집에 따라 많은 레코드가 있으므로 각 레코드를 읽는 것을 포함하지 않는 방법을 찾으려고합니다. –

관련 문제