Hive ๋ช ๋ น์ด ์ ๋ฆฌ
โพ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์์ฑ
CREATE DATABASE IF NOT EXISTS db_nm;
โพ ํ ์ด๋ธ ์์ฑ
- External : hive์์ ํ
์ด๋ธ dropํ ๊ฒฝ์ฐ hdfs ๊ฒฝ๋ก ๋ฐ ํ์ผ ๋ณด์กด
- HDFS ๊ฒฝ๋ก์ ๋ฐ์ดํฐ ๋ฟ๋ง ์๋๋ผ Amazon, Azure ๋ฑ์ ํด๋ผ์ฐ๋ ์คํ ๋ฆฌ์ง๋ก ์ง์ ๊ฐ๋ฅ
- Managed : hive์์ ํ ์ด๋ธ dropํ ๊ฒฝ์ฐ hdfs ๊ฒฝ๋ก ๋ฐ ํ์ผ ์ญ์
-- External Table
CREATE EXTERNAL TABLE IF NOT EXISTS db_nm.table_nm (
a string comment 'a',
b string comment 'b',
c string comment 'c'
)
comment 'table comment'
PARTITIONED BY (DT STRING)
ROW FORMAT DELIMITED FIELDS TERMINATED BY ','
LINES TERMINATED BY '\n'
STORED AS TEXTFILE
LOCATION 'hdfs://'
;
-- Managed(Internal) Table
CREATE TABLE IF NOT EXISTS db_nm.table_nm (
a string comment 'a',
b string comment 'b',
c string comment 'c'
)
comment 'table comment'
PARTITIONED BY (DT STRING)
ROW FORMAT DELIMITED FIELDS TERMINATED BY ','
LINES TERMINATED BY '\n'
STORED AS TEXTFILE
;
โพ ํ ์ด๋ธ DROP
- MANAGED ํ
์ด๋ธ
- hdfs ๋ฐ์ดํฐ ์ญ์
- EXTERNAL ํ
์ด๋ธ
- tblproperties์ 'external.table.purge'='TRUE'๊ฐ ์์ผ๋ฉด hdfs ๋ฐ์ดํฐ ์ญ์ ๋จ
- tblproperties์ 'external.table.purge'='TRUE'๊ฐ ์์ผ๋ฉด hdfs ๋ฐ์ดํฐ ์ญ์ ์๋จ
- drop table ... purge;
- purge ํค์๋๊ฐ ์์ผ๋ฉด hdfs ๋ฐ์ดํฐ ์ญ์ ๋ ๋ .Trash๋ก ์ฎ๊ฒจ์ง
- purge ํค์๋๊ฐ ์์ผ๋ฉด hdfs ๋ฐ์ดํฐ ์ญ์ ๋ ๋ .Trash๋ก ์ฎ๊ฒจ์ง์ง ์๊ณ ๋ฐ๋ก ์ญ์
- purge ํค์๋๋ hdfs rm ๋ช ๋ น์ด์ -skipTrash ์ต์ ์ ์ฌ์ฉํ ๊ฒ๊ณผ ๋์ผ ํจ๊ณผ
- truncate table <table_name>;
- ์คํค๋ง๋ ์ ์งํ๊ณ ๋ฐ์ดํฐ๋ง ์ง์ธ ๊ฒฝ์ฐ ์ฌ์ฉ (Managed ํ ์ด๋ธ์์๋ง ์คํ ๊ฐ๋ฅ)
DROP TABLE IF EXISTS db_nm.table_nm;
โพ ํํฐ์ ์์ฑ (3๊ฐ์ง ๋ฐฉ๋ฒ)
- MSCK REPAIR TABLE
- hdfs ๊ฒฝ๋ก๋ฅผ ์ฝ์ด์ ์กด์ฌํ๋ ํํฐ์ ์ ๋ณด๋ฅผ ๋ชจ๋ ์ถ๊ฐ
- ํด๋น ํ ์ด๋ธ์ hdfs ๊ฒฝ๋ก ์ ์ฒด๋ฅผ ์ฝ๊ธฐ ๋๋ฌธ์ ๋ฐ์ดํฐ๊ฐ ๋ง์ ๊ฒฝ์ฐ timeout์ด๋ OOM ๋ฐ์
- hive.msck.repair.batch.size๋ก OOM ์๋ฐฉ ๊ฐ๋ฅ
- ALTER TABLE ## ADD PARTITION
- ์๋์ผ๋ก ํน์ ํํฐ์ ์ ๋ณด๋ฅผ ์ถ๊ฐํ ์ ์์
- ALTER TABLE ## ADD PARTITION ## LOCATION
- hdfs ํํฐ์ ๊ฒฝ๋ก๋ ๊ธฐ๋ณธ์ ์ผ๋ก /tmp/dt=20200320์ (=) ํํ๋ฅผ ๊ฐ์ถฐ์ผ ์ ๋๋ก ์ธ์์ ํ๊ณ ์ฌ์ฉ ๊ฐ๋ฅํ์ง๋ง hdfs ๊ฒฝ๋ก์ (=)์ ์ง์ ํด ์ค ์ ์๋ ๊ฒฝ์ฐ LOCATION์ ์ฌ์ฉํ์ฌ ํํฐ์ ๊ณผ hdfs๊ฒฝ๋ก๋ฅผ ๋งคํํด ์ค ์ ์์
- ๋ช ๋ น์ด ์ํ ์ค ์๋ฌ ๋ฐ์ํ์ง ์๋๋ก IF NOT EXISTS ์ถ๊ฐ
MSCK REPAIR TABLE db_nm.table_nm;
ALTER TABLE db_nm.table_nm ADD IF NOT EXISTS PARTITION(dt='20200327');
ALTER TABLE db_nm.table_nm ADD IF NOT EXISTS PARTITION (dt='20200320') LOCATION '/tmp/audit/test/20200320';
ALTER TABLE db_nm.table_nm ADD IF NOT EXISTS PARTITION (dt='20200320',hour='00') LOCATION '/tmp/audit/test/20200320/00';
โพ ํํฐ์ ์ญ์
ALTER TABLE db_nm.table_nm DROP IF EXISTS PARTITION(dt='20200327');
โพ ํ ์ด๋ธ ์คํค๋ง ์กฐํ
desc db_nm.table_nm;
โพ ํ ์ด๋ธ ์คํค๋ง ์กฐํ
- hdfs ๊ฒฝ๋ก, ๊ตฌ๋ถ์ ์ ๋ณด ๋ฑ ํฌํจ, ์์ธํ ๋ณผ ์ ์์
desc formatted db_nm.table_nm;
โพ ํ ์ด๋ธ Comment ์กฐํ
desc extended db_nm.table_nm;
โพ ํ
์ด๋ธ ์ด๋ฆ ๋ณ๊ฒฝ
- ํํฐ์ ์ฌ์์ฑ ํ ํ์ ์์
ALTER TABLE table_name RENAME TO new_table_name;
โพ DELIMITER ๋ณ๊ฒฝ
- 'field.delim' = ์ํ๋ ๊ตฌ๋ถ์๋ก ๋ณ๊ฒฝ
ALTER TABLE table_nm set serde 'org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe' WITH SERDEPROPERTIES ('field.delim' = ',');
โพ ํ ์ด๋ธ ์คํค๋ง ์ปฌ๋ผ ์ถ๊ฐ
- ์ด ๋ฐฉ๋ฒ์ ํ ์ด๋ธ ์คํค๋ง ๋ง์ง๋ง์ ์ปฌ๋ผ์ ์ถ๊ฐํ ๋๋ง ์ฌ์ฉ
ALTER TABLE db_nm.tb_nm ADD COLUMS (`col10` STRING COMMENT '10๋ฒ์งธ ์ปฌ๋ผ', `col11` STRING);
โพ ์คํค๋ง Locaion ๋ณ๊ฒฝ
- ํํฐ์ ์กด์ฌํ๋ ๊ฒฝ์ฐ ํํฐ์ ๋ชจ๋ drop ํด์ฃผ๊ณ ๋ค์ msck repair table๋ก ํํฐ์ ์์ฑ ํ์
ALTER TABLE table_nm SET LOCATION "hdfs://want/location";
โพ ์ปฌ๋ผ๋ช ๋ฐ ์ปฌ๋ผํ์ ๋ณ๊ฒฝ
-- ์ ์ฒด์ ์ฉ
ALTER TABLE db_nm.tb_nm CHANGE COLUMN old_col new_col STRING;
-- ํํฐ์
๋ง์ ๊ฒฝ์ฐ ํํฐ์
๋ณ ์ ์ฉ
ALTER TABLE db_nm.tb_nm PARTITION(part_dt=20201124) CHANGE COLUMN old_col new_col CHAR(5);
โพ hive/beeline ํ์ฌ ์ ์ user ํ์ธ
select current_user();
โพ Hive SQL๋ก CSV ํ์ผ HDFS ๊ฒฝ๋ก์ ์ ์ฅ
insert overwrite directory 'hdfs://clster-name/tmp/csv'
row format delimited fields terminated by ','
select * from tmp.csv_table;
โพ Hive SQL๋ก CSV ํ์ผ ๋ก์ปฌ ์๋ฒ ๊ฒฝ๋ก์ ์ ์ฅ
insert overwrite local directory 'file:///tmp/csv'
row format delimited fields terminated by ','
select * from tmp.csv_table;
โพ ํ ์ด๋ธ ์กฐํ (like ๊ตฌ๋ฌธ ์ฌ์ฉ)
use default;
show tables like 'sample.*'; -- default ๋ฐ์ดํฐ๋ฒ ์ด์ค์ sample๋ก ์์ํ๋ ํ
์ด๋ธ ์กฐํ
โพ String Type์ผ๋ก ์ ์ฅํ timestamp ์ปฌ๋ผ ๊ฐ์ date format์ผ๋ก ๋ณํํ๋ ๋ฐฉ๋ฒ
from_unixtime(cast(ds_timestamp as bigint) div 1000, 'yyyy-MM-dd HH')
โพ hql ํ์ผ๋ก ์ฌ๋ฌ ์ค ์คํํ ๋ ์๋ฌ ๋ฐ์ํด๋ ๊ณ์ ์งํํ๋ ์ต์
hive --force=true -f test.hql
โพ Hive ์ฟผ๋ฆฌ ์งํ ์๋ ์ ์ฐธ๊ณ ํ ๋ช ๋ น์ด
show locks;
show transactions;
โพ Hive ์ฟผ๋ฆฌ ๊ฒฐ๊ณผ ํ์ผ merge (1๊ฐํ์ผ๋ก ๋ณํฉ)
--mapreduce ์์ง์ผ ๊ฒฝ์ฐ
set hive.merge.mapredfiles=true;
--tez ์์ง์ผ ๊ฒฝ์ฐ
set hive.merge.tezfiles=true;
--ํ์ผ 1๊ฐ๋น ์ฌ์ด์ฆ
set hive.merge.size.per.task=512000000;