티스토리 뷰

ETC

Large data insert sql ce 3.5 database

kaki104 2012. 3. 16. 16:01
반응형
경기도 지방 버스 운행 정보 기본 데이터를 SQL CE database file로 만들기 위한 삽질..
Area, Route, Station까지는 용량이 얼마 되지 않아서..그냥 넣으면 되는데..
문제는 RouteStation 테이블..으흐흠..text 덤프 사이즈가 6.17 MB (6,478,194 bytes)라는..
이걸 db에 넣는다고 엄청난 삽질을 했는데..약 이틀정도만에 성공했다. 입력한 방법을 간단하게 적어 본다.

1. 일단 테이블을 간단하게 만든다.
원본 데이터는

ROUTE_ID|STATION_ID|UPDOWN|STA_ORDER|ROUTE_NM|STATION_NM^100100011|207000023|정|1|106|대원여객^100100011|207000022|정|2|106|가재울교차로^100100011|207000021|정|3|106|가능역
대략 이렇게 생긴 녀석인데, 여기서 버스번호, 정류소명은 필드로 만들지 않았다.
Master 테이블에 있는 데이터이기 때문에 추가로 만들 이유가 없기 때문이다.

2. 테이블 생성 쿼리
쿼리로 만들어두 되고, 디자인 화면에서 만들어도 된다.

CREATE TABLE [ROUTESTATION] (
  [ROUTE_ID] bigint NOT NULL
, [STATION_ID] bigint NOT NULL
, [STA_ORDER] int NOT NULL
, [UPDOWN] nvarchar(10) NULL
);

**SQL CE Database 파일에 쿼리를 실행 시키는 방법은
1) VS2010 Server Explorer을 사용하는 방법
2) VS2010 SQL Server Compact Toolbox를 사용하는 방법
3) Microsoft SQL Server Management Studio 2008 R2를 사용하는 방법이 있다. -> 이 방법이 안정성이 있는듯..

3. csv 파일 만들기
수동으로 테이블 만들어 주고, 처음에 이 데이터를 SQL Server에 Import를 해 놓은 것이 있어서.. 그 데이터를 엑셀로 옮기고
그걸 csv 파일로 저장해서.. seq ce import가 가능한 상태로 만들었다.

ROUTE_ID,STATION_ID,STA_ORDER,UPDOWN
200000039,228001043,96,역
200000039,228001042,97,역
200000039,203000287,98,역
200000039,203000283,99,역

맨 처음줄은 필드명이 존재하는 상태여야지 sql ce import 명령을 실행시킬 수 있다.

4. Insert Query 만들기
SQL Server Compact Toolbox(이 녀석에 대해서는 이전 포스트를 참조한다.)를 이용해서, database file과 연결하고,

위에서 보이는것 처럼, Import Data from CSV를 선택한다.

그러면 Import data from CSV라는 팝업이 뜨면서 CSV파일을 선택할 수 있고, 아까 만들어 놓은 파일을 선택하고, Import를 눌러 주면 Insert 쿼리를 대량으로 생성해 준다.

-- Script Date: 2012-03-16 오후 3:20  - Generated by ExportSqlCe version 3.5.2.5
INSERT INTO [ROUTESTATION] ([ROUTE_ID],[STATION_ID],[STA_ORDER],[UPDOWN]) VALUES ('200000039','228001043','96',N'역');
GO
INSERT INTO [ROUTESTATION] ([ROUTE_ID],[STATION_ID],[STA_ORDER],[UPDOWN]) VALUES ('200000039','228001042','97',N'역');
GO

그 Insert Query들을 파일로 저장을 한다. 그런데 이넘의 파일이 UTF-8로 저장이 되는데..Microsoft SQL Server Management Studio로 읽어 들이면 한글이 깨진다. 그래서 저장된 파일을 NotePad로 불러와서 ANSI 형태로 다시 저장을 해 준다.

5. Microsoft SQL Server Management Studio
저장된 Insert Query를 Microsoft SQL Server Management Studio로 불러온 다음 쿼리를 실행시켜 준다. 실행시간 3분 43초만에 148487개의 레코드를 입력했다.

이제 입력된 데이터를 확인 하고, Key를 추가해 준다.
(테이블에 Key를 처음부터 추가해 주고 Insert 작업을 하면..언제 끝날지 모른다..)

ALTER TABLE [ROUTESTATION] ADD CONSTRAINT [PK__ROUTESTATION__0000000000000182] PRIMARY KEY ([ROUTE_ID],[STATION_ID],[STA_ORDER]);
GO



반응형

'ETC' 카테고리의 다른 글

Telerik Report Error 처리  (0) 2012.05.21
SignalR  (0) 2012.04.02
코드 난독화 Code Obfuscation 링크  (0) 2012.03.07
MEF 참고 코드  (0) 2012.03.02
Reactive Extension (Rx) Link  (0) 2012.02.27
댓글