database.sarang.net
UserID
Passwd
Database
DBMS
MySQL
PostgreSQL
Firebird
Oracle
Informix
Sybase
MS-SQL
DB2
ㆍCache
CUBRID
LDAP
ALTIBASE
Tibero
DB 문서들
스터디
Community
공지사항
자유게시판
구인|구직
DSN 갤러리
도움주신분들
Admin
운영게시판
최근게시물
Cache Q&A 932 게시물 읽기
No. 932
[팁] CSV(콤마구분) 파일 가장 빠르게 로딩하는 방법
작성자
COS전문가
작성일
2009-07-27 18:03
조회수
5,287

Batch 모드로 데이터베이스에 데이터를 로딩하는 데 가장 빠른 방법은 없나요?

라고 질문한다면 그 답은 바로 Cache DB에 있다고 알려주고 싶다.


이때 사용되는 Cache ObjectScript 함수는 바로 $LISTFROMSTRING() 이다.


COS에서 디스크에 있는 테이블의 데이터 구조를 알면 값을 직접 변경할 수 있다는 것은 파워풀한 COS를 사용해 본 사용자라면 다들 알고 있을 것이다. 가령, MyData 라는 클래스(테이블)가 있고, 해당하는 필드가 A1,A2,A3,A4,CX,CY로 여섯 개가 있다고 가정하면, 

Class User.MyData Extends (%Persistent, %Populate)

{

Property A1 As %String;

Property A2 As %String;

Property A3 As %String;

Property A4 As %String;

Property CX As %Integer;

Property CY As %Integer;


}


이 테이블은 아래와 같은 글로벌(데이터) 구조에 따라 저장되게 된다:


1:  ^User.MyDataD = 1
2:  ^User.MyDataD(1) = $lb("","A1값","A2값","A3값","A4값","CX값","CY값")

이때, 맨 앞에 한 칸은 ""로 두어야 한다는 것을 유의하기 바란다.


테이블의 데이터가 매번 외부 파일에서 다시 로딩되어야 하는 경우라면, 아래와 같은 Method를 만들어서 바로 로딩이 가능하다. 


ClassMethod LoadFile(filename As %String) As %Status

{

 set file=##class(%FileCharacterStream).%New()

 set sc=file.LinkToFile(filename)

 if 'sc {!,"File Open error!",! q}

 set i=1

 do {

  set token=file.ReadLine()

  // Trim

  set token=","_$e(token,1,$L(token)-1)

  // Insert

  set ^User.MyDataD(i)=$LISTFROMSTRING(token)

  set i=i+1

 }while 'file.AtEnd

 set ^SPECTRADB.MyDataD=i-1

 quit $$$OK

}



Test.txt 파일을 아래와 같이 만들어서 C:\temp 디렉터리에 넣어 두고 수행해 보자.

샘플 Test.txt 파일 내용:

123123123,12312312,112,122,12312312312,1223123123,

321123123,12312312,112,122,12312312311,1223123124,

위 파일은 마지막에 한줄이 더 들어가지 않도록 주의하여야 한다.


이제 Cache 터미널에서 아래와 같은 명령으로 수행해 보자.


> write ##class(User.MyData).LoadFile("c:\temp\Test.txt")


시스템관리포탈 홈-글로벌-네임스페이스-해당 글로벌 보기에서 아래와 같은 결과가 나왔으면 성공:

1:  ^User.MyDataD = 2
2:  ^User.MyDataD(1) = $lb("","123123123","12312312","112","122","12312312312","1223123123")
3:  ^User.MyDataD(2) = $lb("","321123123","12312312","112","122","12312312311","1223123124")


시간이 허락한다면, Load File 앞 뒤에 Timestamp를 찍어서 소요된 시간을 표시해 보면 더 보람이 있을 것이다. 


위와 같은 방법으로, Cache에서 일괄 처리에 최적화된 데이터 로딩을 수행할 수 있다. 궁금한 점은 이메일로 문의하세요.


[Top]
No.
제목
작성자
작성일
조회
987cache는 강제로 index를 태울수 없다는게 사실인가요? [1]
이국진
2009-09-08
5564
947cache db 다운로드 [3]
궁금이
2009-08-26
8790
933cache 오류로그 중에 [1]
궁금이
2009-08-01
5570
932[팁] CSV(콤마구분) 파일 가장 빠르게 로딩하는 방법
COS전문가
2009-07-27
5287
931cache DB 업그레드하느 방법.. [5]
지나가다
2009-07-24
5631
930[CSP] 2009.1 업그레이드 이슈 및 해결법
CSP마스터
2009-07-24
5058
717[SQL]어제날짜 가져오는 쿼리
SQL배
2009-06-19
8164
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2023 DSN, All rights reserved.
작업시간: 0.049초, 이곳 서비스는
	PostgreSQL v16.1로 자료를 관리합니다