2. altiShapeLoader 사용하기#
이 장에서는 altiShapeLoader를 사용하는 방법에 관해 설명한다.
알티베이스 선행조건 - SRID 등록#
Spatial Reference Identifier (SRID)는 공간 정보 객체의 위치를 나타내는 좌표계 시스템을 표현하는 고유한 값이다. Altibase 서버에서 SRID는 SYSTEM_.USER_SRS_ 메타 테이블(이하 시노님 SPATIAL_REF_SYS)에 저장한다.
쉐이프 파일 가져오기 할 때 적절한 좌표 정보를 제공하기 위해 SRID가 필요하다. 쉐이프 파일 구성 요소 중 SRID 정보를 가지고 있는 파일은 .prj 파일이며, 이 SRID는 가져오기 수행하기 전 SPATIAL_REF_SYS 테이블에 미리 입력해야 한다.
Altibase 서버에 등록된 SRID 확인 방법#
Altibase 서버에 등록된 SRID는 아래 문장으로 확인할 수 있다.
SELECT * FROM SPATIAL_REF_SYS;
Altibase 서버에 SRID를 등록하는 방법#
.prj 파일이 가지고 있는 SRID가 Altibase 서버에 등록되어 있지 않은 경우 SYS_SPATIAL.ADD_SPATIAL_REF_SYS 프로시저를 이용해 등록한다.
-
SYS_SPATIAL.ADD_SPATIAL_REF_SYS 프로시저는 Altibase 저장 패키지 SYS_SPATIAL을 생성해야 사용할 수 있다. Altibase 저장 패키지는 SYS 사용자 소유로 생성해야 한다. SYS_SPATIAL.ADD_SPATIAL_REF_SYS 프로시저가 없는 경우 altiShapeLoader 수행 시 아래와 같은 에러가 발생한다.
[Preparing & analyzing metadata] com.altibase.gis.lib.util.AltiException: Failed to ensure condtitions to insert a new SRID into database - Unable to find target package [SYS_SPATIAL]
-
altiShapeLoader를 실행하는 데이터베이스 사용자가 ADD_SPATIAL_REF_SYS 프로시저를 수행하고자 할 경우 EXECUTE ANY PROCEDURE 권한이 필요하다.
-- 데이터베이스 사용자가 altitest 인 경우 iSQL> GRANT EXECUTE ANY PROCEDURE TO altitest;
SYS_SPATIAL.ADD_SPATIAL_REF_SYS 사용 방법은 Spatial SQL Reference 매뉴얼을 참고한다.
실행 옵션#
altiShapeLoader 수행하려면 Altibase 서버 접속 정보와 작업 종류, 테이블 이름, 쉐이프 파일 경로 등의 실행 옵션을 입력해야 한다. 실행 옵션 입력은 2가지 방법을 제공한다.
실행 옵션 입력 방법#
-
명령 줄 인터페이스(Command Line Interface, CLI) 방식
명령 줄 인터페이스에서 altiShapeLoader 실행 옵션을 입력하는 일괄식 (Batch mode) 방식으로 쉐이프 파일마다 다른 입력 옵션이 필요한 경우 사용한다. 실행 후 필요한 정보를 차례로 입력하는 대화식(Interactive mode) 방식은 지원하지 않는다.
-
altiShapeLoader 설정 파일 방식
altiShapeLoader 설정 파일인 altiShapeLoader.properties 파일을 읽어 실행 옵션 값을 적용한다. 이 파일은 altiShapeLoader.properties.release 파일을 altiShapeLoader.properties 이름으로 복사해서 생성하며altiShapeLoader 실행 파일(altiShapeLoader.sh 또는 altiShapeLoader.bat)과 같은 디렉터리에 있어야 한다.
Altibase 서버 접속 정보 및 공통 옵션들은 altiShapeLoader 설정 파일을 이용한다.
실행 옵션 입력 우선 순위#
실행 옵션 값은 아래 순서로 적용한다.
- 명령 줄 인터페이스
- altiShapeLoader 설정 파일
- 정의된 기본값
예를 들어 쉐이프 파일 가져오기에서 테이블 이름을 명령 줄 옵션에 T1을 입력하고 altiShapeLoader 설정 파일에서 T2로 입력한 경우 우선순위가 높은 명령 줄 옵션값인 T1 테이블을 작업 대상으로 선택한다. 앞 두 가지 입력 방법에서 입력하지 않은 경우 altiShapeLoader에 정의된 기본값인 .shp 파일 이름을 테이블 이름으로 적용한다.
아래는 Altibase 서버 접속 정보를 포함한 공통적인 가져오기 옵션은 altiShapeLoader 설정 파일에 입력하고 작업 종류, 테이블 이름, 개별 쉐이프 파일 경로는 명령 줄 인터페이스에서 입력한 예제이다.
% cat ./altiShapeLoader.properties.release
###############################################
# DB connection arguments
###############################################
DB_IP = 127.0.0.1
DB_PORT = 20300
DB_NAME = mydb
DB_USER = SYS
DB_PASSWORD = MANAGER
JDBC_PATH = ${ALTIBASE_HOME}/lib/Altibase.jar
###############################################
# General options
###############################################
# CREATE_TABLE = T
# TABLE_TBS = SYS_TBS_DISK_DATA
# CREATE_INDEX = F
# INDEX_TBS = SYS_TBS_DISK_DATA
# DBF_CHAR = EUC-KR
# ENDIAN = B
# CASE_SENSIITIVE = F
# CREATE_BAD = F
###############################################
# Performance options
###############################################
# PARALLEL = 4
# COMMIT = 1000
###############################################
# Mandatory arguments
###############################################
# OPERATION = import
## Use / instead of \ when specifying Windows file path.
# SHAPE_FILE = ./sample.shp
# TABLE_NAME = T1
###############################################
# Special options
###############################################
#GEO_COL_SIZE = 103809024
#SRID = 2097
% cp altiShapeLoader.properties.release altiShapeLoader.properties
% ./altiShapeLoader.sh -o import -f subway_station.shp -T subway_station
-----------------------------------------------------------------
altiShapeLoader Release 1.0
Shapefile import/export utility for Altibase datatbase
Copyright(c) 2000, ALTIBASE Corporation or its subsidiaries.
All Rights Reserved.
-----------------------------------------------------------------
...
필수 옵션#
필수 옵션은 명령 줄 인터페이스와 altiShapeLoader 설정 파일, 둘 중 한 곳에 반드시 입력해야 하는 정보이다. 입력하지 않으면 오류를 출력하고 작업을 중단한다. "명령줄 옵션"은 명령 줄 인터페이스에서 -option_name 형식으로, ''altiShapeLoader 설정 파일 옵션''은 altiShapeLoader 설정 파일에서 OPTION_NAME=value 형식으로 입력한다.
아래 두 가지 옵션은 일반적으로 쉐이프 파일마다 다른 값을 가지므로 명령 줄 인터페이스에서 직접 입력하는 것을 권장한다.
명령줄 옵션 | altiShapeLoader 설정 파일 옵션 | 의미 |
---|---|---|
-o | OPERATION | altiShapeLoader 작업 종류를 입력한다. import 또는 export를 입력할 수 있다. import는 쉐이프 파일에서 공간 데이터 정보를 테이블로 입력한다. import는 세 가지 방법으로 이용할 수 있으며 보다 자세한 내용은 쉐이프 파일 가져오기(Import)절을 참고한다. - 하나의 쉐이프 파일을 하나의 테이블에 입력 - 디렉터리 내 여러 쉐이프 파일을 하나의 테이블에 입력 - 디렉터리 내 여러 쉐이프 파일을 각각의 개별 테이블에 입력 export는 테이블에 저장된 공간 데이터를 쉐이프 파일에 저장한다. 보다 자세한 설명은 쉐이프 파일 내보내기(Export)를 참고한다. |
-f | SHAPE_FILE | 쉐이프 파일이 위치한 경로 또는 경로를 포함한 .shp 파일을 지정한다. - 경로를 포함한 .shp 파일을 지정 예 : -f subway_station.shp - 쉐이프 파일이 위치한 경로 지정 예 : -f multi2single |
Altibase 서버 접속 정보는 필수 옵션이다. 반복적으로 사용한다면 altiShapeLoader 설정 파일에 추가한다.
명령줄 옵션 | altiShapeLoader 설정 파일 옵션 | 의미 |
---|---|---|
-s | DB_IP | Altibase 서버를 설치한 OS의 호스트 이름(hostname) 또는 IP 주소 |
-port | DB_PORT | Altibase 서버의 서비스 포트 번호 |
-d | DB_NAME | 데이터베이스 이름 (예: mydb) |
-u | DB_USER | 데이터베이스 사용자 ID |
-p | DB_PASSWORD | 사용자 ID와 일치하는 암호 |
-j | JDBC_PATH | 접속에 사용할 Altibase JDBC 드라이버 파일 경로 (예: ./Altibase.jar) |
선택 옵션#
선택 옵션은 작업 종류에 따라 사용자가 선택적으로 입력하는 정보이다. 명령 줄 인터페이스이나 altiShapeLoader 설정 파일 어느 곳에도 입력하지 않으면 정의된 기본값을 사용한다.
명령줄 옵션 | altiShapeLoader 설정 파일 옵션 | 의미 | 기본값 |
---|---|---|---|
-t | TABLE_NAME | 테이블 이름을 지정한다. -o 옵션이 import 경우 공간 데이터를 입력할 테이블을 의미한다. -create_table 옵션이 T 이면서 이 옵션을 생략하면 테이블 이름은 .shp 파일 이름을 사용한다. 예를 들어 .shp 파일 이름이 test.shp이면 테이블 이름은 test이다. 대소문자 구분은 case_sensitive 옵션 설정에 따른다. -o 옵션이 export 경우 공간 데이터가 저장된 테이블을 의미한다. |
쉐이프 파일 이름 |
-create_table | CREATE_TABLE | -o 옵션이 import 경우 테이블 생성 여부를 설정한다. T 또는 F를 입력할 수 있다. T는 FID(Feature ID)를 첫 번째 컬럼으로 가진 테이블을 생성한다. 또한 레코드마다 고유한 FID 값 입력을 위해 시퀀스(SEQ_table_name_FID) 객체를 생성한다. 같은 이름의 시퀀스 객체가 데이터베이스에 존재하면 생성하지 않는다. F는 테이블을 생성하지 않는다. |
T |
-table_tbs | TABLE_TBS | 테이블이 생성될 테이블스페이스 이름을 입력한다. 이 옵션을 생략하면 데이터베이스 사용자의 기본 테이블스페이스에 생성한다. -create_table 옵션이 T일 때만 적용한다. | 기본 테이블스페이스 |
-create_index | CREATE_INDEX | 공간 데이터 타입 컬럼에 인덱스 생성 여부를 설정한다. T 또는 F를 입력할 수 있다. T는 인덱스를 생성하고 F는 생성하지 않는다. -create_table 옵션이 T일 때만 적용한다. |
F |
-index_tbs | INDEX_TBS | 인덱스가 생성될 테이블스페이스 이름을 입력한다. 이 옵션을 생략하면 데이터베이스 사용자의 기본 테이블스페이스에 생성한다. -create_index 옵션이 T일 때만 적용한다. | 기본 테이블스페이스 |
-dbf_char | DBF_CHAR | 쉐이프 파일 가져오기 및 내보내기에서 .dbf 파일을 읽을 때 인코딩할 캐릭터셋(character-Set)을 설정한다. altiShapeLoader 설정 파일과 컬럼 이름 매핑 파일(-col_map_file 옵션 참고)을 읽을 때도 같은 캐릭터셋을 적용한다. | EUC-KR |
-endian | ENDIAN | 쉐이프 파일의 endian 종류. B 또는 L 을 입력할 수 있다. B는 Big Endian이고 L은 Little Endian이다. -o 옵션이 import 인 경우 적용한다. |
B |
-case_sensitive | CASE_SENSITIVE | 테이블/컬럼 이름 대소문자 구분 여부를 설정한다. T 또는 F 를 입력할 수 있다. T는 사용자 입력값을 그대로 데이터베이스에 입력하고 F는 대문자로 변경하여 입력한다. |
F |
-col_map_file | COL_MAP_FILE | 컬럼 이름 매핑 파일 경로를 설정한다. 컬럼 이름 매핑 파일은 쉐이프 파일에서 정의한 컬럼 이름과 다르게 테이블의 컬럼 이름을 생성할 때, 사용자가 Key=value 형식으로 작성하는 텍스트 파일이다. shpColName=dbColName 형식으로 작성하며 값이 없으면 쉐이프 파일에서 정의한 컬럼 이름으로 테이블을 생성한다. 대소문자를 구분은 -case_sensitive 옵션 설정에 따른다. |
쉐이프 파일 컬럼이름 |
-create_bad | CREATE_BAD | 가져오기 또는 내보내기가 실패한 레코드를 기록하기 위한 bad 파일 생성 여부를 설정한다. T 또는 F 를 입력할 수 있다. T는 가져오기 또는 내보내기가 실패한 레코드를 지정한 파일에 기록한다. bad 파일 이름은 쉐이프 파일 이름.bad 형태이며 -o 옵션이 import 경우 parallel 옵션 값만큼 bad 파일이 생성될 수 있다. 실패한 레코드가 한 건도 없다면 bad 파일은 생성되지 않는다. F는 가져오기 또는 내보내기가 실패해도 bad 파일을 생성하지 않는다. |
F |
성능 옵션#
altiShapeLoader의 가져오기 수행 성능을 조정하기 위한 옵션이다. 최대 성능을 위해 altiShapeLoader를 설치한 시스템의 CPU와 메모리 사양에 따라 적절한 조정이 필요하다.
명령줄 옵션 | altiShapeLoader 설정 파일 옵션 | 의미 | 기본값 |
---|---|---|---|
-parallel | PARALLEL | 데이터 입력 작업 쓰레드 수. 가져오기 수행 성능 조정을 위한 옵션이다. altiShapeLoader는 생산자-소비자 패턴(Producer Consumer Pattern)의 멀티 쓰레드 구조로, 쉐이프 파일을 읽어 큐에 넣는 1개의 쓰레드(생산자)와 큐에서 데이터를 읽어 데이터베이스에 입력하는 N개의 쓰레드(소비자)로 구성된다. 여기서 parallel 옵션은 N개의 소비자 쓰레드를 의미한다. 최소값은 1이고 최대값에 제한이 없다. 이 옵션을 사용하지 않은 경우 기본값 4를 적용한다. |
4 |
-commit | COMMIT | 데이터 입력 시 커밋 단위. 가져오기 수행 성능 조정을 위한 옵션이다. 데이터 입력 작업 쓰레드가 몇 개 레코드 단위로 커밋할 것인지를 결정한다. 최소값은 1이고 최대값에 제한이 없다. 이 옵션을 사용하지 않은 경우 기본값 1000을 적용한다. |
1000 |
특수 옵션#
특수 옵션은 특별 목적을 위해 제공하는 옵션들로 일반적인 경우에는 사용하지 않기를 권장한다.
명령줄 옵션 | altiShapeLoader 설정 파일 옵션 | 의미 | 기본값 |
---|---|---|---|
-srid | SRID | 사용자 강제 지정 SRID 값. altiShapeLoader가 .prj 파일을 처리하지 못하는 경우 강제로 지정할 SRID를 설정한다. 상세 방법은 SRID 가져오기 및 내보내기 부분을 참고한다. |
N/A |
-geo_col_size | GEO_COL_SIZE | 테이블 생성시 공간(geometry) 데이터 컬럼의 precision 지정한다. 단위는 byte 이다. 기본값보다 큰 컬럼이 필요할 때만 사용한다. | 103,809,024 (99MB) |
쉐이프 파일 가져오기(Import)#
가져오기는 쉐이프 파일 구성 요소 중 .shp 파일의 공간 정보와 .dbf 파일의 속성 정보를 데이터베이스에 입력하는 작업이다. 가져오기는 쉐이프 파일을 구성하는 .shp, .shx, .dbf, .prj 등의 파일을 필요로 한다. 가져오기 수행 전 SRID가 Altibase 서버에 등록되어 있어야 한다. 이에 관한 설명은 알티베이스 선행조건 - SRID 등록를 참고한다.
가져오기는 크게 세 가지로 구분할 수 있다.
- 하나의 쉐이프 파일을 하나의 테이블로 가져오기 (Single shapefile into single table)
- 여러 쉐이프 파일을 하나의 테이블로 가져오기 (Multiple shapefiles into single table)
- 여러 쉐이프 파일을 각각의 개별 테이블로 가져오기 (Multiple shapefiles into each tables)
각 작업 별 필수 실행 옵션은 아래와 같다. (O : 필수, △ : 선택, X : 입력 불가)
명령줄 옵션 | altiShapeLoader 설정 파일 옵션 | 하나의 쉐이프 파일을 하나의 테이블로 가져오기 | 여러 쉐이프 파일을 하나의 테이블로 가져오기 | 여러 쉐이프 파일을 각각의 개별 테이블로 가져오기 |
---|---|---|---|---|
-o | OPERATION | O | O | O |
-f | SHAPE_FILE | O | O | O |
-t | TABLE_NAME | △ | O | X |
하나의 쉐이프 파일을 하나의 테이블로 가져오기 (Single shapefile into single table)#
가장 일반적인 경우로 .shp, .shx, .dbf 등으로 구성된 하나의 쉐이프 파일을 하나의 테이블로 가져오기를 수행한다. OPERATION(-o)과 SHAPE_FILE(-f)는 필수 옵션으로 SHAPE_FILE(-f) 옵션에 .shp 확장자 파일을 입력한다. TABLE_NAME (-t)은 선택 옵션이다.
아래는 subway_station.shb, subway_station.shx, subway_station.dbf 로 구성된 하나의 쉐이프 파일을 하나의 테이블로 가져오기를 수행한 예제이다.
$ ls -l data/subway_station.*
-rw-r--r-- 1 altibase altibase 287186 Apr 28 2021 data/subway_station.dbf
-rw-r--r-- 1 altibase altibase 758 Apr 28 2021 data/subway_station.prj
-rw-r--r-- 1 altibase altibase 758 Apr 28 2021 data/subway_station.prj.bak
-rw-r--r-- 1 altibase altibase 3052 Apr 28 2021 data/subway_station.sbn
-rw-r--r-- 1 altibase altibase 7716 Apr 28 2021 data/subway_station.shp
-rw-r--r-- 1 altibase altibase 2276 Apr 28 2021 data/subway_station.shx
$ ./altiShapeLoader.sh -o import -f data/subway_station.shp
-----------------------------------------------------------------
altiShapeLoader Release 1.0
Shapefile import/export utility for Altibase datatbase
Copyright(c) 2000, ALTIBASE Corporation or its subsidiaries.
All Rights Reserved.
-----------------------------------------------------------------
Importing shp requested: /home/altiShapeLoader/data/subway_station.shp
[Preparing & analyzing metadata]
[CREATE SEQUENCE] CREATE SEQUENCE "ALTITEST"."SEQ_SUBWAY_STATION_FID" START WITH 1 INCREMENT BY 1 MINVALUE 1 CYCLE
[CREATE SEQUENCE] Success
[CREATE TABLE] CREATE TABLE "ALTITEST"."SUBWAY_STATION" ( FID BIGINT DEFAULT "SEQ_SUBWAY_STATION_FID".NEXTVAL PRIMARY KEY, "THE_GEOM" GEOMETRY(103809024) SRID 2097, "XCOORD" DOUBLE, "YCOORD" DOUBLE, "GUBUN" VARCHAR(254), "GUBUN2" VARCHAR(254), "NAM" VARCHAR(254), "NAM2" VARCHAR(254) )
[CREATE TABLE] Success
[Importing data started] A single dot (.) means 1,000 records processed.
.
[Importing data done]
<summary>
[File ] /home/altiShapeLoader/data/subway_station.shp
[Status] [Read] Success, [Write] Success
[Read ] Total:272, Success:272, Fail:0
[Write ] Total:272, Success:272, Fail:0
[Time ] 0:00:00.138 (HH:MM:SS.sss)
-t 옵션으로 테이블 이름을 명시하지 않았지만 altiShapeLoader 설정 파일(altiShapeLoader.properties)에 CREATE_TABLE=T 이 기본 설정으로 포함되어 있어 SEQ_SUBWAY_STATION_FID 시퀀스와 SUBWAY_STATION 테이블을 생성하고 SUBWAY_STATION 테이블에 공간 데이터를 입력한다.
[DATA IMPORT start]와 [DATA IMPORT done] 사이의 점(dot)은 레코드 1,000개 단위로 출력한다. 본 예제의 레코드 수는 32개로 1개가 출력되었다.
수행 결과는 <summary>에 출력한다.
- [Status] [Read] Success, [Write] Success
쉐이프 파일 읽기 및 테이블 입력이 모두 성공하였음을 의미한다. - [Read ] Total:272, Success:272, Fail:0
272개의 데이터를 성공적으로 읽었음을 의미한다. - [Write ] Total:272, Success:272, Fail:0
읽은 272개의 데이터를 오류없이 테이블에 입력하였음을 의미한다. - [Time ] 0:00:00.124
쉐이프 파일 읽기 및 테이블 입력 소요 시간으로hh:mm:ss.sss
형식으로 출력한다.
여러 쉐이프 파일을 하나의 테이블로 가져오기 (Multiple shapefiles into single table)#
여러 쉐이프 파일을 하나의 테이블로 입력한다. 쉐이프 파일들은 같은 디렉터리 내에 있어야 하며 모두 같은 스키마를 가져야 한다. 필수 옵션은 OPERATION(-o), SHAPE_FILE(-f),TABLE_NAME (-t) 이다. SHAPE_FILE(-f) 옵션에 디렉터리 경로를 입력한다.
아래 예제는 multi2single 디렉터리에 있는 3개의 쉐이프 파일을 MULTI2SINGLE 테이블에 가져오기를 수행하는 과정이다. altiShapeLoader 설정 파일에 CREATE_TABLE=T 이 기본 설정으로 포함되어 있어 SEQ_MULTI2SINGLE_FID 시퀀스와 MULTI2SINGLE 테이블을 생성하고 MULTI2SINGLE 테이블에 가져오기를 수행한다.
$ ls -l data/multi2single
합계 100
-rw-r--r-- 1 altibase altibase 426 2021-04-28 09:07 river.dbf
-rw-r--r-- 1 altibase altibase 758 2021-05-14 09:33 river.prj
-rw-r--r-- 1 altibase altibase 20648 2021-04-28 09:07 river.shp
-rw-r--r-- 1 altibase altibase 340 2021-04-28 09:07 river.shx
-rw-r--r-- 1 altibase altibase 645 2021-04-28 09:07 river2.dbf
-rw-r--r-- 1 altibase altibase 758 2021-05-14 09:34 river2.prj
-rw-r--r-- 1 altibase altibase 20080 2021-04-28 09:07 river2.shp
-rw-r--r-- 1 altibase altibase 332 2021-04-28 09:07 river2.shx
-rw-r--r-- 1 altibase altibase 645 2021-04-28 09:07 river3.dbf
-rw-r--r-- 1 altibase altibase 758 2021-05-14 09:34 river3.prj
-rw-r--r-- 1 altibase altibase 20080 2021-04-28 09:07 river3.shp
-rw-r--r-- 1 altibase altibase 332 2021-04-28 09:07 river3.shx
$ ./altiShapeLoader.sh -o import -f data/multi2single -t MULTI2SINGLE
-----------------------------------------------------------------
altiShapeLoader Release 1.0
Shapefile import/export utility for Altibase datatbase
Copyright(c) 2000, ALTIBASE Corporation or its subsidiaries.
All Rights Reserved.
-----------------------------------------------------------------
Importing shp requested: /home/altiShapeLoader/data/multi2single/river.shp
[Preparing & analyzing metadata]
[CREATE SEQUENCE] CREATE SEQUENCE "ALTITEST"."SEQ_MULTI2SINGLE_FID" START WITH 1 INCREMENT BY 1 MINVALUE 1 CYCLE
[CREATE SEQUENCE] Success
[CREATE TABLE] CREATE TABLE "ALTITEST"."MULTI2SINGLE" ( FID BIGINT DEFAULT "SEQ_MULTI2SINGLE_FID".NEXTVAL PRIMARY KEY, "THE_GEOM" GEOMETRY(103809024) SRID 2097, "ID" BIGINT )
[CREATE TABLE] Success
[Importing data started] A single dot (.) means 1,000 records processed.
.
[Importing data done]
<summary>
[File ] /home/altiShapeLoader/data/multi2single/river.shp
[Status] [Read] Success, [Write] Success
[Read ] Total:30, Success:30, Fail:0
[Write ] Total:30, Success:30, Fail:0
[Time ] 0:00:00.071 (HH:MM:SS.sss)
Importing shp requested: /home/altiShapeLoader/data/multi2single/river2.shp
[Preparing & analyzing metadata]
[Importing data started] A single dot (.) means 1,000 records processed.
.
[Importing data done]
<summary>
[File ] /home/altiShapeLoader/data/multi2single/river2.shp
[Status] [Read] Success, [Write] Success
[Read ] Total:29, Success:29, Fail:0
[Write ] Total:29, Success:29, Fail:0
[Time ] 0:00:00.029 (HH:MM:SS.sss)
Importing shp requested: /home/altiShapeLoader/data/multi2single/river3.shp
[Preparing & analyzing metadata]
[Importing data started] A single dot (.) means 1,000 records processed.
.
[Importing data done]
<summary>
[File ] /home/altiShapeLoader/data/multi2single/river3.shp
[Status] [Read] Success, [Write] Success
[Read ] Total:29, Success:29, Fail:0
[Write ] Total:29, Success:29, Fail:0
[Time ] 0:00:00.053 (HH:MM:SS.sss)
여러 쉐이프 파일을 각각의 개별 테이블로 가져오기 (Multiple shapefiles into each tables)#
.shp, .shx, .dbf 등으로 구성된 여러 쉐이프 파일을 각각의 테이블로 입력할 수 있다. 쉐이프 파일들은 같은 디렉터리 내에 있어야 하며 모두 같은 스키마를 가져야 한다. 필수 옵션은 OPERATION(-o), SHAPE_FILE(-f) 이고 SHAPE_FILE(-f) 옵션에 디렉터리 경로를 입력한다. 이 경우 파일 이름을 테이블 이름으로 사용하기 때문에 TABLE_NAME (-t)은 사용하지 않는다. 이 옵션을 사용할 경우 '여러 쉐이프 파일을 하나의 테이블로 가져오기'를 수행한다.
다음은 multi2multi 디렉터리에 있는 네 개의 쉐이프 파일들을 각각 4개의 테이블에 가져오기를 수행하는 예제이다. altiShapeLoader 설정 파일에 CREATE_TABLE=T 이 기본 설정으로 포함되어 있어 시퀀스 4개와 BUILDING, FIRESTATION, HEALTHCENTER, POLICESTATION 테이블을 생성하고 가져오기를 수행한다.
$ ls -l data/multi2multi
합계 16064
-rw-r--r-- 1 altibase altibase 10877274 2021-04-28 09:07 building.dbf
-rw-r--r-- 1 altibase altibase 758 2021-04-28 09:07 building.prj
-rw-r--r-- 1 altibase altibase 5234704 2021-04-28 09:07 building.shp
-rw-r--r-- 1 altibase altibase 204356 2021-04-28 09:07 building.shx
-rw-r--r-- 1 altibase altibase 6538 2021-04-28 09:07 firestation.dbf
-rw-r--r-- 1 altibase altibase 758 2021-04-28 09:07 firestation.prj
-rw-r--r-- 1 altibase altibase 328 2021-04-28 09:07 firestation.qix
-rw-r--r-- 1 altibase altibase 332 2021-04-28 09:07 firestation.sbn
-rw-r--r-- 1 altibase altibase 124 2021-04-28 09:07 firestation.sbx
-rw-r--r-- 1 altibase altibase 744 2021-04-28 09:07 firestation.shp
-rw-r--r-- 1 altibase altibase 284 2021-04-28 09:07 firestation.shx
-rw-r--r-- 1 altibase altibase 6818 2021-04-28 09:07 healthcenter.dbf
-rw-r--r-- 1 altibase altibase 758 2021-04-28 09:07 healthcenter.prj
-rw-r--r-- 1 altibase altibase 332 2021-04-28 09:07 healthcenter.qix
-rw-r--r-- 1 altibase altibase 340 2021-04-28 09:07 healthcenter.sbn
-rw-r--r-- 1 altibase altibase 124 2021-04-28 09:07 healthcenter.sbx
-rw-r--r-- 1 altibase altibase 772 2021-04-28 09:07 healthcenter.shp
-rw-r--r-- 1 altibase altibase 292 2021-04-28 09:07 healthcenter.shx
-rw-r--r-- 1 altibase altibase 11202 2021-04-28 09:07 policestation.dbf
-rw-r--r-- 1 altibase altibase 758 2021-04-28 09:07 policestation.prj
-rw-r--r-- 1 altibase altibase 364 2021-04-28 09:07 policestation.qix
-rw-r--r-- 1 altibase altibase 468 2021-04-28 09:07 policestation.sbn
-rw-r--r-- 1 altibase altibase 156 2021-04-28 09:07 policestation.sbx
-rw-r--r-- 1 altibase altibase 996 2021-04-28 09:07 policestation.shp
-rw-r--r-- 1 altibase altibase 356 2021-04-28 09:07 policestation.shx
$ ./altiShapeLoader.sh -o import -f data/multi2multi
-----------------------------------------------------------------
altiShapeLoader Release 1.0
Shapefile import/export utility for Altibase datatbase
Copyright(c) 2000, ALTIBASE Corporation or its subsidiaries.
All Rights Reserved.
-----------------------------------------------------------------
Importing shp requested: /home/altiShapeLoader/data/multi2multi/building.shp
[Preparing & analyzing metadata]
[CREATE SEQUENCE] CREATE SEQUENCE "ALTITEST"."SEQ_BUILDING_FID" START WITH 1 INCREMENT BY 1 MINVALUE 1 CYCLE
[CREATE SEQUENCE] Success
[CREATE TABLE] CREATE TABLE "ALTITEST"."BUILDING" ( FID BIGINT DEFAULT "SEQ_BUILDING_FID".NEXTVAL PRIMARY KEY, "THE_GEOM" GEOMETRY(103809024) SRID 2097, "UFID" VARCHAR(28), "BLD_NM" VARCHAR(100), "DONG_NM" VARCHAR(100), "GRND_FLR" INTEGER, "UGRND_FLR" INTEGER, "PNU" VARCHAR(19), "ARCHAREA" DOUBLE, "TOTALAREA" DOUBLE, "PLATAREA" DOUBLE, "HEIGHT" DOUBLE, "STRCT_CD" VARCHAR(2), "USABILITY" VARCHAR(5), "BC_RAT" DOUBLE, "VL_RAT" DOUBLE, "BLDRGST_PK" VARCHAR(28), "USEAPR_DAY" VARCHAR(8), "REGIST_DAY" VARCHAR(8), "GB_CD" VARCHAR(2), "VIOL_BD_YN" VARCHAR(1) )
[CREATE TABLE] Success
[Importing data started] A single dot (.) means 1,000 records processed.
..........................
[Importing data done]
<summary>
[File ] /home/altiShapeLoader/data/multi2multi/building.shp
[Status] [Read] Success, [Write] Success
[Read ] Total:25,532, Success:25,532, Fail:0
[Write ] Total:25,532, Success:25,532, Fail:0
[Time ] 0:00:00.951 (HH:MM:SS.sss)
Importing shp requested: /home/altiShapeLoader/data/multi2multi/firestation.shp
[Preparing & analyzing metadata]
[CREATE SEQUENCE] CREATE SEQUENCE "ALTITEST"."SEQ_FIRESTATION_FID" START WITH 1 INCREMENT BY 1 MINVALUE 1 CYCLE
[CREATE SEQUENCE] Success
[CREATE TABLE] CREATE TABLE "ALTITEST"."FIRESTATION" ( FID BIGINT DEFAULT "SEQ_FIRESTATION_FID".NEXTVAL PRIMARY KEY, "THE_GEOM" GEOMETRY(103809024) SRID 2097, "NAM" VARCHAR(25), "ADDR" VARCHAR(254) )
[CREATE TABLE] Success
[Importing data started] A single dot (.) means 1,000 records processed.
.
[Importing data done]
<summary>
[File ] /home/altiShapeLoader/data/multi2multi/firestation.shp
[Status] [Read] Success, [Write] Success
[Read ] Total:23, Success:23, Fail:0
[Write ] Total:23, Success:23, Fail:0
[Time ] 0:00:00.053 (HH:MM:SS.sss)
Importing shp requested: /home/altiShapeLoader/data/multi2multi/healthcenter.shp
[Preparing & analyzing metadata]
[CREATE SEQUENCE] CREATE SEQUENCE "ALTITEST"."SEQ_HEALTHCENTER_FID" START WITH 1 INCREMENT BY 1 MINVALUE 1 CYCLE
[CREATE SEQUENCE] Success
[CREATE TABLE] CREATE TABLE "ALTITEST"."HEALTHCENTER" ( FID BIGINT DEFAULT "SEQ_HEALTHCENTER_FID".NEXTVAL PRIMARY KEY, "THE_GEOM" GEOMETRY(103809024) SRID 2097, "NAM" VARCHAR(25), "ADDR" VARCHAR(254) )
[CREATE TABLE] Success
[Importing data started] A single dot (.) means 1,000 records processed.
.
[Importing data done]
<summary>
[File ] /home/altiShapeLoader/data/multi2multi/healthcenter.shp
[Status] [Read] Success, [Write] Success
[Read ] Total:24, Success:24, Fail:0
[Write ] Total:24, Success:24, Fail:0
[Time ] 0:00:00.051 (HH:MM:SS.sss)
Importing shp requested: /home/altiShapeLoader/data/multi2multi/policestation.shp
[Preparing & analyzing metadata]
[CREATE SEQUENCE] CREATE SEQUENCE "ALTITEST"."SEQ_POLICESTATION_FID" START WITH 1 INCREMENT BY 1 MINVALUE 1 CYCLE
[CREATE SEQUENCE] Success
[CREATE TABLE] CREATE TABLE "ALTITEST"."POLICESTATION" ( FID BIGINT DEFAULT "SEQ_POLICESTATION_FID".NEXTVAL PRIMARY KEY, "THE_GEOM" GEOMETRY(103809024) SRID 2097, "NAM" VARCHAR(50), "ADDR" VARCHAR(254), "TEL" VARCHAR(20), "FAX" VARCHAR(20) )
[CREATE TABLE] Success
[Importing data started] A single dot (.) means 1,000 records processed.
.
[Importing data done]
<summary>
[File ] /home/altiShapeLoader/data/multi2multi/policestation.shp
[Status] [Read] Success, [Write] Success
[Read ] Total:32, Success:32, Fail:0
[Write ] Total:32, Success:32, Fail:0
[Time ] 0:00:00.048 (HH:MM:SS.sss)
쉐이프 파일 내보내기(Export)#
내보내기는 테이블에 저장된 공간 데이터 정보를 쉐이프 파일로 저장하는 기능이다. 내보내기를 수행하면 쉐이프 파일을 구성하는 .shp, .shx, .dbf 등의 파일들을 생성한다. altiShapeLoader는 테이블에 저장된 공간 객체의 SRID와 SPATIAL_REF_SYS 메타 테이블을 참조하여 GeoTools 라이브러리를 통해 .prj 파일을 생성한다. 테이블의 FID 컬럼은 내보내기 대상이 아니므로 쉐이프 파일에 저장하지 않는다.
필수 옵션은 OPERATION(-o)과 SHAPE_FILE(-f) 이며 SHAPE_FILE(-f) 옵션에 .shp 확장자 파일을 입력한다. 선택 옵션인 TABLE_NAME (-t)을 생략하면 테이블 이름을 쉐이프 파일 이름으로 사용한다.
내보내기 예제#
다음은 POLICESTATION 테이블에 저장된 공간 데이터 정보를 policestation2.shp 파일에 내보내기를 수행하는 예제이다.
$ ls -l policestation2*
ls: cannot access policestation2*: No such file or directory
$ ./altiShapeLoader.sh -o export -t POLICESTATION -f ./policestation2.shp
-----------------------------------------------------------------
altiShapeLoader Release 1.0
Shapefile import/export utility for Altibase datatbase
Copyright(c) 2000, ALTIBASE Corporation or its subsidiaries.
All Rights Reserved.
-----------------------------------------------------------------
Exporting requested: ./policestation2.shp
[Preparing files & analyzing metadata]
[Exporting data started] A single dot (.) means 1,000 records processed.
.
[Exporting data done]
<summary>
[File ] ./policestation2.shp
[Status] [Read] Success, [Write] Success
[Read ] Total:32, Success:32, Fail:0
[Write ] Total:32, Success:32, Fail:0
[Time ] 0:00:00.342 (HH:MM:SS.sss)
<commit started>와 <finished> 사이의 점(dot)은 레코드 1,000개 단위로 출력한다. 이 예제의 데이터는 32개 레코드로 1개가 출력되었다.
수행 결과는 <summary>에 출력한다.
- [Status] [Read] Success, [Write] Success
테이블 조회 및 파일 기록 모두 성공적으로 수행하였음을 의미한다. - [Read ] Total:32, Success:32, Fail:0
테이블 조회에서 32개 데이터를 성공적으로 읽었음을 의미한다. - [Write ] Total:32, Success:32, Fail:0
테이블에서 조회한 32개 데이터를 쉐이프 파일에 오류없이 기록하였음을 의미한다. - [Time ] 0:00:01.287
테이블 조회 및 파일 기록 소요 시간으로hh:mm:ss.sss
형식으로 출력한다.
export 수행 후 쉐이프 파일 생성 결과는 아래와 같다.
$ ls -l policestation2*
-rw-rw-rw- 1 altibase altibase 11201 Nov 21 21:38 policestation2.dbf
-rw-rw-rw- 1 altibase altibase 397 Nov 21 21:38 policestation2.fix
-rw-rw-rw- 1 altibase altibase 737 Nov 21 21:38 policestation2.prj
-rw-rw-rw- 1 altibase altibase 996 Nov 21 21:38 policestation2.shp
-rw-rw-rw- 1 altibase altibase 356 Nov 21 21:38 policestation2.shx
$ file policestation2*
policestation2.dbf: DBase 3 data file (32 records)
policestation2.fix: data
policestation2.prj: ASCII text, with very long lines, with no line terminators
policestation2.shp: ESRI Shapefile version 1000 length 498 type Point
policestation2.shx: ESRI Shapefile version 1000 length 178 type Point
SRID 가져오기 및 내보내기#
SRID 가져오기#
쉐이프 파일 가져오기 수행 시 적절한 좌표 정보를 함께 제공하기 위해 SRID 정보가 필요하다. 아래 2가지 조건이 준비되어 있다면 altiShapeLoader가 .prj 파일을 읽고 분석하여 SRID 정보와 함께 공간 데이터를 입력하므로 사용자가 SRID 정보 입력을 위해 따로 해야 할 작업은 없다.
-
.prj 파일
SRID는 쉐이프 파일 구성 요소 중 하나인 .prj 파일에 기록된다. 쉐이프 파일 가져오기를 할 때 이 파일이 있어야 SRID 정보를 올바르게 입력할 수 있다.
-
SPATIAL_REF_SYS 테이블
.prj 파일에 저장된 SRID가 SPATIAL_REF_SYS 테이블에 입력되어 있어야 한다.
하지만 아래 두 가지 경우 사용자는 사용자 정의 파일(epsg.properties)이나 -srid 옵션을 사용하여 SRID 정보를 입력해야 한다.
-
.prj 파일이 없는 경우
SPATIAL_REF_SYS 테이블에 SRID가 있지만 .prj 파일이 없는 경우로 쉐이프 파일 가져오기 수행 시 [Preparing & analyzing metadata] 단계 로그에 아래와 같은 에러 메시지가 발생한다.
Unable to find the target prj file: /home/altiShapeLoader/data/subway_station.prj Unable to parse the given prj file and no user input SRID
-
.prj 파일 분석이 실패하는 경우
.prj 파일이 존재하고 SPATIAL_REF_SYS 테이블에 SRID가 있지만 altiShapeLoader에서 SRID를 분석할 수 없는 경우이다. altiShapeLoader는 GeoTools에서 제공하는 라이브러리(gt-epsg-hsql-xx.jar)와 사용자 정의 파일(epsg.properties)을 참조하여 SRID를 분석하는데 이 참조 파일에 .prj 파일의 SRID가 없는 것을 의미한다. 쉐이프 파일 가져오기 수행 시 [Preparing & analyzing metadata] 단계 로그에 아래와 같은 에러 메시지가 발생한다.
[SRID] Failed to parse or find EPSG code: /home/altiShapeLoader/data/bld.prj Unable to parse the given prj file and no user input SRID
다음은 EPSG 코드에 없는 GRS80 타원체 좌표 SR-ORG:7846를 SRID로 가진 쉐이프 파일 bld를 가져오기 수행하는 예제이다. SRID 7846은 SPATIAL_REF_SYS 테이블에 입력되어 있어야 한다.
-
사전 준비 : 메타 테이블 SPATIAL_REF_SYS에 SRID 입력
-- 메타 테이블 SPATIAL_REF_SYS에 SRID를 입력한다. -- SRID와 AUTH_SRID는 같게 입력해야 한다. iSQL> EXEC SYS_SPATIAL.ADD_SPATIAL_REF_SYS ( 7846, 'SR-ORG', 7846, 'PROJCS["PCS_ITRF2000_TM",GEOGCS["GCS_ITRF_2000",DATUM["D_ITRF_2000",SPHEROID["GRS_1980",6378137.0,298.257222101]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]],PROJECTION["Transverse_Mercator"],PARAMETER["False_Easting",1000000.0],PARAMETER["False_Northing",2000000.0],PARAMETER["Central_Meridian",127.5],PARAMETER["Scale_Factor",0.9996],PARAMETER["Latitude_Of_Origin",38.0],UNIT["Meter",1.0]]', 'Proj4js.defs["SR-ORG:7846"] = "+proj=tmerc +lat_0=38 +lon_0=127 +k=1 +x_0=200000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs";' ); Execute success. iSQL> SELECT SRID, AUTH_NAME, AUTH_SRID FROM SPATIAL_REF_SYS WHERE AUTH_SRID = '7846'; SRID AUTH_NAME AUTH_SRID ---------------------------------------- 7846 SR-ORG 7846 1 row selected.
-
사용자 정의 파일(epsg.properties)을 이용
epsg.properties 파일에 SRID=WKT 형식으로 SRID를 추가한다. 이 파일은 altiShapeLoader 디렉터리에 있어야 한다.
$ cat epsg.properties 7846=PROJCS["PCS_ITRF2000_TM",GEOGCS["GCS_ITRF_2000",DATUM["D_ITRF_2000",SPHEROID["GRS_1980",6378137.0,298.257222101]],PRIMEM ["Greenwich",0.0],UNIT["Degree",0.0174532925199433]],PROJECTION["Transverse_Mercator"],PARAMETER["False_Easting",1000000.0], PARAMETER["False_Northing",2000000.0],PARAMETER["Central_Meridian",127.5],PARAMETER["Scale_Factor",0.9996],PARAMETER ["Latitude_Of_Origin",38.0],UNIT["Meter",1.0]] $ altiShapeLoader.sh -o import -f data/bld.shp
-
-srid 옵션 사용
altiShapeLoader 가져오기 실행 시 실행 옵션에 -srid를 추가한다.
$ altiShapeLoader.sh -o import -f data/bld.shp -srid 7846
SRID 내보내기#
쉐이프 파일 내보내기 작업을 수행하면 .shp 파일과 함께 SRID 정보를 담고 있는 .prj 파일을 함께 생성한다. altiShapeLoader는 테이블에 저장된 AUTH_SRID를 참조하여 GeoTools 라이브러리를 통해 .prj 파일 내용을 작성한다.