2.1 語法數據庫
create temporary table student(安全
ip string comment 'student ip',session
name stringapp
)ide
2.2 Hive從0.14.0開始提供建立臨時表的功能優化
表只對當前session有效,session退出後,表自動刪除。spa
2.3 注意點.net
a. 若是建立的臨時表表名已存在,那麼當前session引用到該表名時實際用的是日誌
臨時表,只有drop或rename臨時表名才能使用原始表;orm
b. 臨時表限制:不支持分區字段和建立索引。
2.4 臨時表的存儲類型配置
從Hive1.1開始臨時表能夠存儲在內存或SSD,使用hive.exec.temporary.table.storage
參數進行配置,該參數有三種取值:memory、ssd、default。
3.1 語法
creata external table student_ext(
id int,
name string
)
row format delimited fields terminated by '\t';
3.2 管理表和外部表的異同
a. 外部表建立的時候多一個關鍵字external
b. 管理表刪除:數據庫表的數據和HDFS上的對應表文件同時刪除;
外部表刪除:只刪除數據庫表的數據,HDFS上的對應表文件不會刪除。
c. 外部表的這種狀況保證了數據的安全性,防止誤操做刪除數據。
d. 除了建立表的時候外部表多了一個關鍵字,其餘操做語句和管理表徹底一致。
4.1 建立分區表(注意partpartitioned和row的順序)
天+小時(通常分區表和外部表一塊兒使用)
creata external table student_parthour(
id int,
name string
)
partitioned by (date string,hour string)
row format delimited fields terminated by '\t';
4.2 導入數據
load data local inpath '/opt/modules/mydata/student.txt'
into table student_parthour Partition(date='20161101',hour='18');
4.3 查看分區表數據
select * from student_parthour where date='20161101' and hour='18';
4.4 查看分區表(主要是查看分區狀況):show partitions student_part ;
4.5 刪除分區表:alter table student_part drop partition(date='20161030');
4.6 分區表的應用場景
a. 由第三方提供的數據源或者數據源是日誌文件;
b. 分區表通常採用外部表+分區表的格式;
c. 主要用於定時任務加載數據;
d. 主要用於同比或者環比分析數據。
注意:引用外部表數據是由於刪除外部表保留數據; 防止誤刪除操做,刪除全部
數據;查詢時儘可能利用分區字段,若是不使用分區字段,就會所有掃描。
4.7 分區表優勢:分期增量抽取數據,定時任務完成,主要在於優化查詢。
5.1 語法
creata table student_new(
id int,
name string
)
clustered by (id) sorted by(name) into 4 buckets
row format delimited fields terminated by '\t';
5.2 桶表的使用
a. Hive採用對列值哈希,而後除以桶的個數求餘決定該條記錄存放在哪一個桶當中;
b. 採用桶可以帶來一些好處,好比JOIN操做. 對於JOIN操做兩個表有一個相同的列,若是對這兩個表都進行了桶操做. 那麼將保存相同列值的桶進行JOIN操做就能夠,能夠大大較少JOIN的數據量;
c. hive中table能夠分紅partition,clustered by能夠將table和partition分紅bucket,
d. sorted by將bucket中的數據排序. 提高某些查詢操做效率,例如mapside join;
e. clustered by和sorted by不會影響數據的導入,用戶必須本身負責數據如何導 入,包括數據的分桶和排序。'set hive.enforce.bucketing = true' 能夠自動控制上一輪reduce的數量從而適配bucket的個數,用戶也能夠本身設置 mapred.reduce.tasks去適配bucket 個數。
5.3 bucket主要做用
a. 數據sampling(抽樣)
b. 提高某些查詢操做效率,例如mapside join
like建立的表只有表結構,沒有數據
creata table student_new(
id int,
name string
)
like student
location '/user/hive/warehouse/student'
row format delimited fields terminated by '\t';
creata table student_new(
id int,
name string
)
row format delimited fields terminated by '\t';
常見的分隔符:\t(tab), 逗號,空格
creata table student2(
id int,
name string
)
row format delimited fields terminated by '\t'
location '/app/mydata/'; --這個對應的是hdfs上的目錄
create table db_1031.emp(empno int,ename string,job string,mgr int,hiredate string,
sal double,comm double,deptno int)row format delimited fields terminated by '\t';
create table db_0831.emp_as as select * from emp ;
create table db_0831.emp_as as select name from emp ;
create table db_0831.emp_like like emp ;