hive中外部表 內部表 分割槽表 分桶表

2021-09-29 20:56:40 字數 3582 閱讀 6223

建立資料庫

create database myhive;

選擇資料庫

use myhive;

建立外部表 (external)

createexternaltable techer (t_id string,t_name string) row format delimited fields terminated by 『\t』;

載入資料 (/export/servers/hivedatas/techer .csv 資料在虛擬機器上位址)

load data local inpath 『/export/servers/hivedatas/techer .csv』 into table techer ;

在hdfs檢視表中的資料/user/hive/warehouse/myhive.db/techer 資料在hdfs上的位址

hadoop fs -ls /user/hive/warehouse/myhive.db/techer

在hive中查詢

select * from techer

刪除資料表techer

drop table techer;

再次檢視

hadoop fs -ls /user/hive/warehouse/myhive.db/techer(資料依然存在)

建立資料庫 create database myhive; 選擇資料庫 use myhive; 建立內部表
create table student(t_id string,t_name string) row format delimited fields terminated by 『\t』;

載入資料 (/export/servers/hivedatas/student .csv 資料在虛擬機器上位址)

load data local inpath 『/export/servers/hivedatas/student .csv』 into table student;

在hdfs檢視表中的資料 (/user/hive/warehouse/myhive.db/student 資料在hdfs上的位址)

hadoop fs -ls /user/hive/warehouse/myhive.db/student

在hive中查詢

select * from student

刪除資料表techer

drop table student;

再次檢視

hadoop fs -ls /user/hive/warehouse/myhive.db/student(資料不存在)

企業常見的分割槽規則:按天進行分割槽(一天乙個分割槽)

建立資料庫

create database myhive;

選擇資料庫

use myhive;

建立分割槽表的語句 (partitioned by (分割槽名 分割槽型別)

create table score(s_id string,c_id string,s_score int) partitioned by (month string) row format delimited

fieldsterminated by 『\t』;

create table score2 (s_id string,c_id string,s_score int) partitioned by (year string,month string,day string) row formatdelimited fields terminated by 『\t』;

資料載入

load data local inpath 『/opt/hive/score.csv』 into table score partition (month=『201806』);

load data local inpath 『/opt/hive/score.csv』 into table score2 partition(year=『2018』,month=『06』,day=『02』);

特別強調:分割槽字段絕對不能出現在資料表以有的字段中。

作用:將資料按區域劃分開,查詢時不用掃瞄無關的資料,加快查詢速度。

是在已有的表結構之上新新增了特殊的結構

開啟hive的桶表功能

set hive.enforce.bucketing=true;

設定桶(reduce)的個數

set mapreduce.job.reduces=3;

建立資料庫

create database myhive;

選擇資料庫

use myhive;

建分桶表 (clustered by(c_id))

create table course (c_id string,c_name string,t_id string) clustered by(c_id) into 3 buckets row format

delimited fields terminated by 『\t』;

建立基本表

create table course_common (c_id string,c_name string,t_id string) row format delimited fields terminated by

『\t』;

基本表新增資料

load data local inpath 『/export/servers/hivedatas/course.csv』 into table course_common;

在基本表中查詢資料插入到分桶表

insert overwrite table course select * from course_common cluster by(c_id);

確認分桶內的資料

[root@node01 hive]# hadoop fs -cat /user/hive/warehouse/course/000000_0 03 英語 03

[root@node01hive]# hadoop fs -cat /user/hive/warehouse/course/000001_0 01 語文 02

[root@node01 hive]# hadoop fs -cat /user/hive/warehouse/course/000002_0 02 數學 01

特別強調:

分桶字段必須是表中的字段。

分桶邏輯:

對分桶字段求雜湊值,用雜湊值與分桶的數量取餘,餘幾,這個資料就放在那個桶內。

分桶的作用和好處

1、對於join的需求,能夠起到優化加速的作用。(前提是,join欄位設定為分桶字段)

2、用於資料取樣(獲取/提取資料樣本)

將資料編號作為分桶字段。這樣每個桶內各種「級別」的資料都有。

Hive 中內部表 外部表,分割槽表,分桶表

1.內部表 外部表 管理表 內錶,也叫託管表 外部表 外表 建表時,有external關鍵字的就是外部表。在drop table時,外表的資料是不會被刪除的,內錶的資料會被刪除,但兩者對應的元資料 metadata 是都會被刪除的 如果資料只是給hive用,那麼建議建立內錶 如果資料還可能會給hiv...

內部表,外部表,分割槽表

1.未被external修飾的是內部表 managed table 被external修飾的為外部表 external table 2.內部表資料由hive自身管理,外部表資料由hdfs管理。3.內部表資料儲存在hive.metastore.warehouse.dir 預設 user hive wa...

Hive 內部表 外部表 分割槽表 擴充套件命令

create external table if not exists 表名 列名資料型別 comment 本列注釋 comment 表注釋 partitioned by 列名資料型別 comment 本列注釋 clustered by 列名,列名,sorted by 列名 asc desc inf...