원천 로그를 그대로 받는 bronze 단계 Kudu 테이블은 다음 규칙으로 통일한다.
CREATE TABLE IF NOT EXISTS bronze.<table> 로 만든다.STRING 이다. 형 변환은 다음 단계에서 한다.HASH 로 잡고 버킷 수는 6 으로 통일한다.timestamp 처럼 예약어인 컬럼 이름은 백틱으로 감싼다.입력 형식은 테이블명 한 줄, 컬럼 목록 (PK 목록) 한 줄이다.
stat_apim_log_stage
regn_cd,groupkey,uniqkey,refkey,trxkey,corrkey,apifullname,...,timestamp,position,status,a1 (regn_cd,groupkey,uniqkey,refkey,trxkey,corrkey,sender,timestamp)
CREATE TABLE IF NOT EXISTS bronze.stat_apim_log_stage (
regn_cd STRING,
groupkey STRING,
uniqkey STRING,
refkey STRING,
trxkey STRING,
corrkey STRING,
sender STRING,
`timestamp` STRING,
apifullname STRING,
apiname STRING,
position STRING,
status STRING,
a1 STRING,
PRIMARY KEY (regn_cd, groupkey, uniqkey, refkey, trxkey, corrkey, sender, `timestamp`)
)
PARTITION BY HASH (regn_cd, groupkey, uniqkey, refkey, trxkey, corrkey, sender, `timestamp`) PARTITIONS 6
STORED AS KUDU;
이미 만든 .sql 파일에 IF NOT EXISTS 를 넣을 때는 중복 삽입을 막는 패턴으로 치환한다.
find . -name "*.sql" -exec sed -i 's/CREATE TABLE \(IF NOT EXISTS \)\?/CREATE TABLE IF NOT EXISTS /g' {} +
같은 규칙을 반복 적용할 때는 표준 라이브러리만 쓰는 Python 스크립트로 테이블명 · 컬럼 · PK 를 순서대로 입력받아 DDL 을 출력하고 파일로 저장하게 만들어 두면 편하다. --output(파일 저장 여부, 기본 true) · --output_path · --num_partition(기본 6) 을 argparse 로 받고, PK 가 컬럼 목록에 없으면 오류를 내며, 예약어는 자동으로 백틱 처리하고, quit 입력으로 끝낸다.