1. 程式人生 > >Hive分桶和抽樣查詢

Hive分桶和抽樣查詢

一、分桶

      分割槽針對的是資料的儲存路徑;分桶針對的是資料檔案,就相當於hadoop裡面的真正的分割槽。

      ★怎麼選擇桶?預設時對某一列進行hash,使用hashcode對 桶的個數求模取餘,確定哪一條記錄進入哪一個桶。分桶後,桶內有序,整體不一定有序。

      分割槽提供一個隔離資料和優化查詢的便利方式。不過,並非所有的資料集都可形成合理的分割槽,特別是之前所提到過的要確定合適的劃分大小這個疑慮。

       分桶是將資料集分解成更容易管理的若干部分的另一個技術。

       分桶的目的一部分也是為了抽樣調查

案例實操:

1、建立分桶表

create table stu_buk(id int,  name string)

clustered by(id)        #根據什麼分桶-----

into 4 buckets   #分幾個桶

row format delimited fields terminated by '\t';

2、匯入資料

1001    ss1
1002    ss2
1003    ss3
1004    ss4
1005    ss5
1006    ss6
1007    ss7
1008    ss8

hive (default)> load data local inpath '/opt/module/datas/student.txt' into table   stu_buck;

3、檢視建立的分桶表中是否分成4個桶

居然發現沒有4個桶?原因是分桶表是不能通過load上傳資料的,試想一下,資料上傳到hdfs上,這個過程怎麼識別分桶欄位,有怎麼取hash值呢

★綜上所述可得,分通表只能是使用insert select的方式

步驟:

(1)先建一個普通的stu表

create table stu(id int, name string)

row format delimited fields terminated by '\t';

(2)向普通的stu表中匯入資料

load data local inpath '/opt/module/datas/student.txt' into table stu;

(3)匯入資料到分桶表,通過子查詢的方式

insert into table stu_buck

select id, name from stu;

注意:做這些的前提是,reduce必須是隻有一個

所以必要時要設定:

hive (default)> set hive.enforce.bucketing=true;

hive (default)> set mapreduce.job.reduces=-1;

hive (default)> insert into table stu_buck

select id, name from stu;

二、抽樣查詢

對於非常大的資料集,有時使用者需要使用的是一個具有代表性的查詢結果而不是全部結果。Hive可以通過對錶進行抽樣來滿足這個需求。

查詢表stu_buck中的資料。

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

注:tablesample是抽樣語句,語法:TABLESAMPLE(BUCKET x OUT OF y) 。

y必須是table總bucket數的倍數或者因子。hive根據y的大小,決定抽樣的比例。例如,table總共分了4份,當y=2時,抽取(4/2=)2個bucket的資料,當y=8時,抽取(4/8=)1/2個bucket的資料。

x表示從哪個bucket開始抽取,如果需要取多個分割槽,以後的分割槽號為當前分割槽號加上y。例如,table總bucket數為4,tablesample(bucket 1 out of 2),表示總共抽取(4/2=)2個bucket的資料,抽取第1(x)個和第3(x+y)個bucket的資料。

注意:x的值必須小於等於y的值,否則

會經常報:FAILED: SemanticException [Error 10061]: Numerator should not be bigger than denominator in sample clause for table stu_buck,這是原因是x的值大於了y的值

相關推薦

Hive抽樣查詢

一、分桶       分割槽針對的是資料的儲存路徑;分桶針對的是資料檔案,就相當於hadoop裡面的真正的分割槽。       ★怎麼選擇桶?預設時對某一列進行hash,使用hashcode對 桶的個數求模取餘,確定哪一條記錄進入哪一個桶。分桶後,桶內有序,整體不一定有序

大資料(二十二):hive抽樣查詢、自定義函式、壓縮與儲存

一、分桶及抽樣查詢 1.分桶表資料儲存         分割槽針對的是資料儲存路徑(HDFS中表現出來的便是資料夾),分桶針對的是資料檔案。分割槽提供一個隔離資料和優化查詢的便利方式。不過,並非所有的資料集都可形成合理的分割槽,特別是當資料要

Hive抽樣查詢(附帶案例,表的區別)

目錄 總結: 分桶表: 分桶和分割槽的區別: 抽樣查詢: 總結: 總結: ①分桶為抽樣查詢而生,分桶表的建立使用【clustered by (分桶欄位)into 桶的個數 buckets】 ,往分桶表中匯入資料的時候,需要藉助第三張表select tabl

hive,排序,連線

連線 1)等值連線 根據員工表和部門表中部門編號相等,查詢員工編號、員工名、部門名稱 select e.empno,e.ename,d.dept from empt e join dept d on e.deptno=d.deptn o; 2)左連線(左邊的資料比右邊大,對應找不到的

hive管理

分桶:按照使用者建立表時指定的分桶欄位進行hash雜湊多個檔案 1.hive分桶的原理 跟MR中的HashPartitioner的原理一模一樣          MR中:按照key的hash

在mybatis中實現oracle模糊查詢

        今天在工作中,遇到一個業務需求,就是需要在oracle裡進行模糊查詢並分頁,SQL語句如下:        select m.label,m.building_loc_id,m.shape.minx x,m.shape.miny y from         

Hive

簡介本文主要介紹了Hive中分桶表的使用及作用分桶和分割槽分割槽提供了一個隔離資料和優化查詢的便利的方式.但是當分割槽的數量過多時,會產生過多的小分割槽,這樣會給namenode帶來較大的壓力.分桶試講資料集分解成更容易管理的若干部分的另一個技術.使用我們先準備我們將使用的分

5.0其他WEB技術——模糊查詢結合例項

JAVAWEB文章索引點這裡 首先分頁的核心是寫一個PageBean物件,將頁面中要使用到的首頁、上頁、下頁、末頁、頁數、查詢出的內容等等進行一個封裝。然後轉發回到頁面中進行一個顯示。而模糊查詢的核心是對sql語句進行一個拼接,達到模糊匹配需要內容的效果。

Hive(bucket)

一 什麼是桶的概念,和分割槽有啥區別? 對於每一個表或者分割槽,可以進一步細分成桶,桶是對資料進行更細粒度的劃分。預設時對某一列進行hash,使用hashcode對 桶的個數求模取餘,確定哪一條記錄進

Spring Data Jpa 進行原生Sql 條件查詢

因為業務的原因今天寫了一個原生的Spring Data jpa的分頁查詢 : 1 .進行封裝自己PageQuery: public class PageQuery { pub

springMVC、myBatis的物理高階查詢

最新專案用到springMVC和mybatis,分頁其實用一個RowBounds可以實現,但是高階查詢不好封裝, 經過反覆測試,總算搞出來了,感覺封裝的不是很好,有待優化和提高! 原理:利用mybatis自定義外掛功能,自定義一個攔截器,攔截需要分頁的sql

Hive

rri clu pan map limited table clust 同文件 mapred 1.簡介   分桶表是對列值取哈希值的方式將不同數據放到不同文件中進行存儲。對於hive中每一個表,分區都可以進一步進行分桶。由列的哈希值除以桶的個數來決定數據劃分到哪個桶裏。

Hive的排序以及抽樣查詢

排序 全域性排序(Order by) :一個MapReduce 使用order by子句查詢 ASC(ascend):升序(預設) DESC(descend):降序 Order by子句在Select語句結尾 查詢員工資訊按工資升序排列 select * fr

HIVE—索引、的區別

處理 拆分 功能 分布 哈希函數 對比 part 一致性 進一步 一、索引 簡介 Hive支持索引,但是Hive的索引與關系型數據庫中的索引並不相同,比如,Hive不支持主鍵或者外鍵。 Hive索引可以建立在表中的某些列上,以提升一些操作的效率,例如減少MapRedu

Hive常用函式

Hive常用函式和分桶表 一、字串常用函式 二、分桶表   分桶操作是更細粒度的分配方式,一張表可以同時分割槽和分桶,分桶的原理是根據指定的列的計算hash值模餘分桶數量後將資料分開存放。   Hive的分桶實際上就是Hadoop的分割槽,有幾個桶,就用幾個reduce

能說一下你們專案中hive的庫表設計嗎---庫表設計三板斧---內外部表|分割槽|序列化反序列化

資料倉庫的起源可以追溯到計算機與資訊系統發展的初期。它是資訊科技長期複雜演化的產物,並且直到今天這種演化仍然在繼續進行著。而資料倉庫容易讓人糊塗的地方在於它是一種體系結構,而不是一種技術。這點使得許多技術人員和風投都感到沮喪,因為他們希望的是打好成包的專業技術,而非

Hive管理分割槽

分桶管理: https://blog.csdn.net/freefish_yzx/article/details/77150714 分桶和分割槽: https://blog.csdn.net/lzm1340458776/article/details/43085423 下面這篇文章解釋了

hive的三板斧:內部表外部表、分割槽以及序列化/反序列化(SerDe)

hive的三板斧:內部表和外部表、分割槽和分桶以及序列化/反序列化(SerDe)   Hive是Hadoop生態圈中實現資料倉庫的一項技術。雖然Hadoop和HDFS的設計侷限了Hive所能勝任的工作,但是Hive仍然是目前網際網路中最適合資料倉庫的應用技術。 不論從“品相還是舉止

Hive面試題:Hive分割槽表表的區別

分割槽在HDFS上的表現形式是一個目錄, 分桶是一個單獨的檔案 分割槽:  細化資料管理,直接讀對應目錄,縮小mapreduce程式要掃描的資料量 分桶:   1、提高join查詢的效率(用分桶欄位做連線欄位)    

hive的分割槽

1.Hive分割槽表 Hive使用select語句進行查詢的時候一般會掃描整個表內容,會消耗很多時間做沒必要的工作。Hive可以在建立表的時候指定分割槽空間,這樣在做查詢的時候就可以很好的提高查詢的效率。 建立分割槽表的語法: create table tablen