우편번호는 아래 링크 사이트를 통해 최신 데이터를 받을 수 있습니다.
https://www.epost.go.kr/search/zipcode/cmzcd002k01.jsp
1. 테이블 생성
ZIPDB라는 우편번호를 저장할 수 있는 테이블을 생성합니다.
저는 데이터베이스를 TEST라는 곳에서 아래 테이블을 생성하였습니다.
CREATE TABLE IF NOT EXISTS ZIPDB (
ZONE_NO VARCHAR(5) not null COMMENT '구역번호(우편번호)',
CTPRVN VARCHAR(20) COMMENT '시도',
CTPRVN_ENG VARCHAR(40) COMMENT '시도영문',
SIGNGU VARCHAR(20) COMMENT '시군구',
SIGNGU_ENG VARCHAR(40) COMMENT '시군구영문',
EUP_MYEON VARCHAR(20) COMMENT '읍면',
EUP_MYEON_ENG VARCHAR(40) COMMENT '읍면영문',
RN_CODE VARCHAR(12) COMMENT '도로명코드',
RN VARCHAR(80) COMMENT '도로명',
RN_ENG VARCHAR(80) COMMENT '도로명영문',
UNDGRND_AT VARCHAR(1) COMMENT '지하여부(0:지상, 1:지하)',
BDNBR_MNNM INT(5) COMMENT '건물번호본번',
BDNBR_DUCA INT(5) COMMENT '건물번호부번',
BULD_MANAGE_NO VARCHAR(25) COMMENT '건물관리번호',
MUCH_DLVR_OFFIC_NM VARCHAR(40) COMMENT '다량배달처명(null)',
SIGNGU_BDNBR_NM VARCHAR(200) COMMENT '시군구용건물명',
LEGALDONG_CODE VARCHAR(10) COMMENT '법정동코드',
LEGALDONG_NM VARCHAR(20) COMMENT '법정동명',
LI_NM VARCHAR(20) COMMENT '리명',
ADSTRD_NM VARCHAR(40) COMMENT '행정동명',
MNTN_AT VARCHAR(1) COMMENT '산여부(0:토지, 1:산)',
LNM_MNNM INT(4) COMMENT '지번본번',
EMD_SN VARCHAR(2) COMMENT '읍면동일련번호',
LNM_DUCA INT(4) COMMENT '지번부번',
OLD_ZIP VARCHAR(6) COMMENT '구 우편번호(null)',
ZIP_SN VARCHAR(3) COMMENT '우편번호일련번호(null)'
)
ENGINE = INNODB
DEFAULT CHARSET=utf8
;
-- 인덱스 (구역번호 5자리 신 우편번호)
CREATE INDEX ZIPDB_IX1 ON zipdb(ZONE_NO);
-- 인덱스 (시도,시군구,읍면)
CREATE INDEX ZIPDB_IX2 ON zipdb(CTPRVN, SIGNGU, EUP_MYEON);
-- 인덱스(도로명코드)
CREATE INDEX ZIPDB_IX3 ON zipdb(RN_CODE);
-- 인덱스 (도로명)
CREATE INDEX ZIPDB_IX4 ON zipdb(RN);
2. 데이터 로드
우편번호 사이트의 모든 zip 값들을 서버에 /tmp/zip 폴더에 업로드
다만! 파일을 반드시 utf8로 변경 합니다.(메모장 열고 다른이름 저장에서 UTF8로 지정하면 됨.)
실행한 MariaDB는 10.3 버전으로 약간의 문법이 다릅니다.
다음 명령을 실행하여 LOAD DATA 문장을 자동으로 만듭니다.
# ls -lsa /tmp/zip/*.txt | awk '{print "LOAD DATA INFILE " "\x27" $10 "\x27" " INTO TABLE ZIPDB character set " "\x27" "utf8" "\x27" " fields terminated by " "\x27" "|" "\x27" " IGNORE 1 LINES;"}'
아래 문장은 root 계정으로 local 시스템에 TEST 데이터베이스에 접속하라는 의미입니다.
# mysql -u root -p --local-infile=1 TEST (접속)
MariaDB [TEST]> LOAD DATA INFILE '/tmp/zip/강원도.txt' INTO TABLE ZIPDB character set 'utf8' fields terminated by '|' IGNORE 1 LINES;
위와 같이 수행하면 아래 그림과 같이 오류가 없는 경우 Query OK와 함께 Insert된 수가 출력됩니다.
2019.11.01 일 데이터 기준으로 약 1.3GB의 용량이 입력됩니다.
건수 : 3,112,960 건
'Database > MYSQL' 카테고리의 다른 글
MariaDB JSON 컬럼 및 함수들 (0) | 2019.11.04 |
---|---|
MariaDB 테이블 백업 및 복구 (0) | 2019.11.01 |
MariaDB SHA2 512 방식으로 암호화 예제 (0) | 2019.10.25 |
Mysql & MariaDB 튜닝 쉘 (0) | 2019.08.14 |
MySQL 백업용 쉘스크립트입니다. (0) | 2010.01.18 |