分桶及分桶抽樣查詢

2021-10-01 13:41:21 字數 2086 閱讀 3305

1.先建立普通表

2.在建立分桶表

(1)create table 表名 (字段 型別,…) clustered by(根據分桶的字段) into 分桶數 buckets row format delimited fields terminated by 『根據什麼分割』;

create table stu_buck(id int, name string)

clustered by(id)

into 4 buckets

row format delimited fields terminated by 『\t』;

3.設定屬性

(1)set hive.enforce.bucketing=ture;//設定分桶開啟

(2)set mapreduce.job.reduces=-1;

4.將資料從普通表匯入到分桶表

(1)//匯入資料的時候要執行mapreduce,才會分桶

insert into table 分桶表 select * from 普通表;

5.查詢分桶資料

(1)select * from 分桶表tablesample(bucket 從哪個分桶開始抽取 out of 抽取的資料 on 分桶的字段);

hive (default)> select * from stu_buck tablesample(bucket 1 out of 4 on id);

(2)重點語法:tablesample(bucket x out of y)

(3)x表示從哪個bucket開始抽取,如果需要取多個分割槽,以後的分割槽號為當前分割槽號加上y。x的值必須小於等於y的值。

其他常用函式

1.nvl:給null的資料賦值

select nvl(含有null值的字段,所要附的值) from表;

select comm, nvl(comm,mgr) from emp;

2.case when:條件判斷

case 字段 when 資料then 返回的值 else 返回的另乙個值 end

select

dept_id,

sum(case *** when 『男』 then 1 else 0 end) male_count,

sum(case *** when 『女』 then 1 else 0 end) female_count

from

emp_***

3.行轉列

concat(string a/col, string b/col…):拼接字串;

concat_ws(separator, str1, str2,…):它是乙個特殊形式的 concat(),根據分割符拼接字串;

collect_set(col):去重欄位並且合併為陣列,產生array型別字段。

4.列轉行

explode(col):將hive一列中複雜的array或者map結構拆分成多行。

lateral view

用法:lateral view udtf(expression) tablealias as columnalias

解釋:用於和split, explode等udtf一起使用,它能夠將一列資料拆成多行資料,在此基礎上可以對拆分後的資料進行聚合。

5.視窗函式

over():指定分析函式工作的資料視窗大小,這個資料視窗大小可能會隨著行的變而變化。

current row:當前行

n preceding:往前n行資料

n following:往後n行資料

unbounded:起點,unbounded preceding 表示從前面的起點, unbounded following表示到後面的終點

lag(col,n,default_val):往前第n行資料

lead(col,n, default_val):往後第n行資料

ntile(n):把有序分割槽中的行分發到指定資料的組中,各個組有編號,編號從1開始,對於每一行,ntile返回此行所屬的組的編號。注意:n必須為int型別。.

6.rank

rank() 排序相同時會重複,總數不會變

dense_rank() 排序相同時會重複,總數會減少

row_number() 會根據順序計算

Hive分桶表及抽樣查詢

對於非常大的資料集,使用者不需要全部查詢的結果,只需要乙個代表性的查詢結果時,可以通過對錶進行分桶抽樣。hive分桶表 先介紹一下hive桶。桶是比表或分割槽更為細粒度的資料範圍劃分。針對某一列進行桶的組織,對列值雜湊,然後除以桶的個數求餘,決定將該條記錄存放到哪個桶中。好處 1 獲得更高的查詢處理...

hive分桶表join Hive分桶表

測試資料 95001,李勇,男,20,cs 95002,劉晨,女,19,is 95003,王敏,女,22,ma 95004,張立,男,19,is 95005,男,18,ma 95006,孫慶,男,23,cs 95007,易思玲,女,19,ma 95008,李娜,女,18,cs 95009,夢圓圓,女...

hive 修改分桶數 分桶表 Hive中的分桶

對於每乙個表 table 或者分割槽,hive可以進一步組織成桶,也就是說桶是更為細粒度的資料範圍劃分。hive也是針對某一列進行桶的組織。hive採用對列值雜湊,然後除以桶的個數求餘的方式決定該條記錄存放在哪個桶當中。把錶 或者分割槽 組織成桶 bucket 有兩個理由 1 獲得更高的查詢處理效率...