2010-07-11 4 views
1

고등학생의 대형 텍스트 파일을 MySQL에로드하고 있지만 학교 자체는 각 텍스트 파일의 첫 번째 줄에만 표시됩니다. 그래서 같이 : SQL 코드를 사용큰 표를로드하지만 첫 줄에만 식별되는 학교

897781234Metropolitan High     
340098 1001X 678 AS  Reading    101KAS DOE  KEITH A1 340089 A 7782... 

, 어떻게 학교 수의 열을 생성 할 수 있습니다 (예를 들어, 897781234) 수신 테이블의 첫 번째 열에는 학교 각 행으로 식별 될 수 있도록?

는, 내가 사용하고 텍스트 파일을로드하려면 :

LOAD DATA INFILE "f:/school_files/school897781234.txt" 
INTO TABLE my_table FIELDS TERMINATED BY '' 
IGNORE 1 LINES; 

감사합니다!

+0

편집 해 주셔서 감사합니다. – dave

답변

0

흠 ... Windows에서이 작업을 수행하는 것처럼 보입니다. 대형 텍스트 조작을 위해 유닉스/리눅스를 선호하지만, Windows에서 유사한 기술을 사용할 수 있어야합니다 (Cygwin 설치). PowerShell에는 익숙한 경우 유용한 기능이 있습니다. 그것으로 마음에, 여기 당신을 위해 몇 가지 아이디어입니다 :

  1. 그들 모두의 내용하지만 첫 번째 라인을 가진 새 파일을 생성하여, 친화적 인 MySQL을 확인하기 위해 데이터 파일로 찾으면됩니다 스크립트를 작성 학교 정보가 모든 라인 앞에 추가되었습니다. 덤불 파일에서 데이터를로드하십시오. 각 학교에 대한

    (munge-schools.sh) 
    #!/bin/bash 
    ifile=$1 
    ofile=$2 
    school=$(head -1 ${ifile}) 
    tail --lines=+2 ${ifile} | sed "s/^/${school}/" > ${ofile} 
    
    ./munge-schools school897781234.txt school897781234.munged 
    
  2. 은 그대로로드 (첫 번째 줄을 건너 뛰는)을 수행하지만 임시 테이블에로드 한 후 학교 정보 디폴트 학교에 대한 열을 추가합니다. 임시 테이블에서 최종 테이블로 복사하십시오. 많이보다 데이터 포맷에 훨씬 더 빨리 될 것입니다 텍스트 조작 도구의가 - 선택을 감안할 때

, 난 항상 입력이 우호적 파일을 확인하기 위해 데이터베이스 외부 텍스트 조작을하고 함께 갈 것입니다 데이터베이스의 대량로드 도구

+0

답장을 보내 주셔서 감사합니다. 나는 그 개념을 가지고 있다고 생각한다. 적어도이 유형의 작업을 수행하는 "숨겨진"MySQL 스크립트는 없다는 것을 알았습니다. 흥미롭게도 MySQL로드 데이터 INFILE은 IGNORE는 허용하지만 LIMIT는 허용하지 않습니다 (즉, LIMIT 1 LINES). 다시 한 번 감사드립니다! – dave

관련 문제