1. HDFS, Hive 설정
Prereq: JAVA 8
core-site.xml
hdfs-site
hive-site.xml
hadoop-env.sh
2. HDFS, Hive 실행
HDFS 실행
start-dfs.sh
Bash
복사
Hive, Hiveserver2 실행
#metastore 스키마 초기화
hive --service schemaTool -dbType mysql -initSchema
#Hive metastore 서버 실행
hive --service metastore
#Hiveserver 실행
hiveserver2
Bash
복사
3. Hive 테이블 생성
HiveQL 사용법
전체 DDL
차원 테이블
1. 달력 차원
2000년 부터 대략 2041년 까지 15000개의 데이터를 약식으로 제작하였다.
Hive의 컬럼 베이스 파일 포맷인 ORC 포맷을 사용하였고, 차후 테이블의 Update 연산을 가능케 하기 위해 Hive의 자체 설정과 테이블의 transactional 속성을 추가하였다. Update 연상 수행을 위해 Bucketing 또한 진행하였다.
CREATE TABLE securities.DIM_CALENDERS (
CALENDER_KEY BIGINT NOT NULL,
CALENDER_DATE VARCHAR(8),
CALENDER_DESCRIPTION STRING,
CALENDER_DOW VARCHAR(8),
CALENDER_DAY VARCHAR(5),
CALENDER_DAY_NUMBER TINYINT,
CALENDER_WOM TINYINT,
CALENDER_MONTH VARCHAR(5),
CALENDER_MONTH_NUMBER TINYINT,
CALENDER_MONTH_NAME VARCHAR(10),
CALENDER_YEAR SMALLINT,
CALENDER_QUARTER VARCHAR(6),
CALENDER_QUARTER_NUMBER TINYINT,
CALENDER_LAST_DOM VARCHAR(9),
CALENDER_HOLIDAY VARCHAR(8),
CALENDER_WEEKEND VARCHAR(8),
CALENDER_SQL_DATE DATE
)
CLUSTERED BY (CALENDER_KEY) INTO 12 BUCKETS
STORED AS ORC
TBLPROPERTIES (
"transactional"="true",
"orc.compress"="NONE"
);
SQL
복사
2. 사용자 차원
CREATE TABLE securities.DIM_USERS (
USER_KEY BIGINT NOT NULL,
USER_NUMBER VARCHAR(64),
USER_NAME VARCHAR(20),
USER_STATUS VARCHAR(8),
USER_TYPE VARCHAR(8),
USER_EMAIL VARCHAR(40),
USER_PHONE VARCHAR(20),
USER_GENDER VARCHAR(5),
USER_AGE TINYINT,
USER_BIRTH_DATE VARCHAR(8),
USER_INCOME INT,
USER_RISK_TOLERANCE VARCHAR(8),
ROW_EFFECTIVE_TIMESTAMP TIMESTAMP,
ROW_EXPIRATION_TIMESTAMP TIMESTAMP,
ROW_INDICATOR BOOLEAN
)
CLUSTERED BY (USER_KEY) INTO 8 BUCKETS
STORED AS ORC
TBLPROPERTIES (
"transactional"="true",
"orc.compress"="NONE"
);
SQL
복사
3. 계좌 차원
CREATE TABLE securities.DIM_ACCOUNTS (
ACCOUNT_KEY BIGINT NOT NULL,
ACCOUNT_NUMBER VARCHAR(64),
ACCOUNT_STATUS VARCHAR(8),
ACCOUNT_TYPE VARCHAR(8),
ACCOUNT_NAME VARCHAR(20),
ACCOUNT_OPEN_DATE VARCHAR(8),
ACCOUNT_CLOSE_DATE VARCHAR(8),
ACCOUNT_DEPOSIT BIGINT,
ACCOUNT_WITHDRAWING BIGINT,
ROW_EFFECTIVE_TIMESTAMP TIMESTAMP,
ROW_EXPIRATION_TIMESTAMP TIMESTAMP,
ROW_INDICATOR BOOLEAN
)CLUSTERED BY (ACCOUNT_KEY) INTO 8 BUCKETS
STORED AS ORC
TBLPROPERTIES (
"transactional"="true",
"orc.compress"="NONE"
);
SQL
복사
팩트 테이블
1. 가입 팩트
팩트 테이블을 날짜를 기준으로 파티셔닝을 진행하는것이 일반적이다.
CREATE TABLE securities.FACT_REGISTERS (
USER_KEY BIGINT NOT NULL
)
PARTITIONED BY (CALENDER_KEY BIGINT)
STORED AS ORC
TBLPROPERTIES (
"orc.compress"="NONE"
);
SQL
복사
2. 계좌 개설 팩트
CREATE TABLE securities.FACT_OPEN_ACCOUNTS (
USER_KEY BIGINT NOT NULL,
ACCOUNT_KEY BIGINT NOT NULL
)
PARTITIONED BY (CALENDER_KEY BIGINT)
STORED AS ORC
TBLPROPERTIES (
"orc.compress"="NONE"
);
SQL
복사