Hive數據庫表的操做

Hive數據庫表的操做

 

Hive數據庫建表的詳細操做

1.Hive數據表的四種類型:管理表,外部表,分區表,桶表

2. 建立臨時表(關鍵字temporary)

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. 外部表和管理表(關鍵字:external)

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. 分區表的相關操做(關鍵字:partitioned by)

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. 建立桶表(關鍵字:clustered by,sorted by)

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

6. like建立一個和已經存在表類似的表(關鍵字:like)

like建立的表只有表結構,沒有數據

creata table student_new(

id int,

name string

)

like student

location '/user/hive/warehouse/student'

row format delimited fields terminated by '\t';

7. 行格式化分隔符(關鍵字:row format delimited fields terminated by )

creata table student_new(

id int,

name string

)

row format delimited fields terminated by '\t';

常見的分隔符:\t(tab), 逗號,空格

8. 建立表指定位置(關鍵字:location)

creata table student2(

id int,

name string

)

row format delimited fields terminated by '\t'

location '/app/mydata/'; --這個對應的是hdfs上的目錄

 

建立表的方式

1 直接建立表

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';

2 把另一張表的某幾個字段抽取出來建立成一張新表(建立的表包含數據)

create table db_0831.emp_as as select * from emp ;

create table db_0831.emp_as as select name from emp ;

3 複製表結構(不包含數據)

create table db_0831.emp_like like emp ;

相關文章
相關標籤/搜索