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 獲得更高的查詢處理效率...