hive學習 分割槽 分桶和索引

2021-07-16 07:04:22 字數 1663 閱讀 5997

分割槽是以字段的形式在表結構中存在,通過describe table命令可以檢視到字段存在, 但是該字段不存放實際的資料內容,僅僅是分割槽的表示(偽列)。

1)靜態分割槽

create table if not exists sopdm.wyp2(id int,name string,tel string)

partitioned by(age int)

row format delimited

fields terminated by ','

stored as textfile;

--overwrite是覆蓋,into是追加

insert into table sopdm.wyp2

partition(age='25')

select id,name,tel from sopdm.wyp;

2)動態分割槽

--設定為true表示開啟動態分割槽功能(預設為false)

set hive.exec.dynamic.partition=true;

--設定為nonstrict,表示允許所有分割槽都是動態的(預設為strict)

set hive.exec.dynamic.partition.mode=nonstrict;

--insert overwrite是覆蓋,insert into是追加

set hive.exec.dynamic.partition.mode=nonstrict;

insert overwrite table sopdm.wyp2

partition(age)

select id,name,tel,age from sopdm.wyp;

2. 分桶

create table bucketed_user (id int) name string)

clustered by (id) into 4 buckets;

對於每乙個表(table)或者分割槽, hive可以進一步組織成桶,也就是說桶是更為細粒度的資料範圍劃分。hive也是 針對某一列進行桶的組織。hive採用對列值雜湊,然後除以桶的個數求餘的方式決定該條記錄存放在哪個桶當中。

把錶(或者分割槽)組織成桶(bucket)有兩個理由:

(1)獲得更高的查詢處理效率。桶為表加上了額外的結構,hive 在處理有些查詢時能利用這個結構。具體而言,連線兩個在(包含連線列的)相同列上劃分了桶的表,可以使用 map 端連線 (map-side join)高效的實現。比如join操作。對於join操作兩個表有乙個相同的列,如果對這兩個表都進行了桶操作。那麼將儲存相同列值的桶進行join操作就可以,可以大大較少join的資料量。

(2)使取樣(sampling)更高效。在處理大規模資料集時,在開發和修改查詢的階段,如果能在資料集的一小部分資料上試執行查詢,會帶來很多方便。

3.索引

索引可以加快含有group by語句的查詢的計算速度

create index employees_index on table employees(country)

as  'org.apache.hadoop.hive.ql.index.compact.compactindexhandler'

with deferred rebuild

in table employees_index_table ;

hive學習 分割槽 分桶和索引

hive引入partition和bucket的概念,中文翻譯分別為分割槽和桶 我覺的不是很合適,但是網上基本都是這麼翻譯,暫時用這個吧 這兩個概念都是把資料劃分成塊,分割槽是粗粒度的劃分桶是細粒度的劃分,這樣做為了可以讓查詢發生在小範圍的資料上以提高效率。b 分割槽的作用 使用分割槽可以加快資料分片...

Hive的分割槽 分桶 索引

一 分割槽 mr的分割槽 是將資料按照一定的邏輯進行查分,劃分為不同的區域,這個區域的資料將會給指定的reduce。hive的分割槽 對錶劃分成幾個區域,通過分類把不同型別的資料放到不同的目錄下。分割槽表與普通表相比它的優勢和劣勢 優勢 和普通表相比,當按照分割槽條件進行過濾的時候分割槽表會比普通表...

Hive分割槽 分桶

create table t user partition id int name string partitioned by country string row format delimited fields terminated by load data local inpath root h...