一、hive里面的分區表的一般使用場景
二、hive里面的分桶表的一般使用場景
表的數據量較大,并且進行頻繁的聚合操作:分桶可以提高聚合操作的效率。存在一些需要頻繁查詢和過濾的字段:分桶可以使得查詢更加高效。三、Hive分區表是什么
Hive分區是將數據表的某一個字段或多個字段進行統一歸類,而后存儲在在hdfs上的不同文件夾中。當查詢過程中指定了分區條件時,只將該分區對應的目錄作為Input,從而減少MapReduce的輸入數據,提高查詢效率,這也是數倉優化的一個列,也就是分區裁剪。分區表又分為靜態分區表和動態分區表兩種。這也是數倉性能優化的一個常用點,也就是分區裁剪。
分區表分為靜態分區表和動態分區表兩種:
靜態分區表:所謂的靜態分區表指的就是,我們在創建表的時候,就已經給該表中的數據定義好了數據類型,在進行加載數據的時候,我們已經知道該數據屬于什么類型,并且直接加載到該分區內就可以了。動態分區表:所謂的動態分區表,其實建表方式跟靜態分區表沒有區別,最主要的區別是在載入數據的時候,靜態分區表我們載入數據之前必須保證該分區存在,并且我么已經明確知道載入的數據的類型,知道要將數據加載到那個分區當中去,而動態分區表,在載入的時候,我們事先并不知道該條數據屬于哪一類,而是需要hive自己去判斷該數據屬于哪一類,并將該條數據加載到對應的目錄中去。四、Hive分桶表是什么
Hive分桶是相對分區進行更細粒度的劃分。是將整個數據內容按照某列取hash值,對桶的個數取模的方式決定該條記錄存放在哪個桶當中;具有相同hash值的數據進入到同一個文件中。 如要安裝name屬性分為3個桶,就是對name屬性值的hash值對3取摸,按照取模結果對數據分桶。如取模結果為0的數據記錄存放到一個文件,取模為1的數據存放到一個文件,取模為2的數據存放到一個文件。
分桶表的使用好處:
1、基于分桶字段查詢時,減少全表掃描
--基于分桶字段state查詢來自于New York州的數據
--不再需要進行全表掃描過濾
--根據分桶的規則hash_function(New York) mod 5計算出分桶編號
--查詢指定分桶里面的數據 就可以找出結果 此時是分桶掃描而不是全表掃描
select *
from t_usa_covid19_bucket where state="New York";
2、JOIN時可以提高MR程序效率,減少笛卡爾積數量
對于JOIN操作兩個表有一個相同的列,如果對這兩個表都進行了分桶操作。那么將保存相同列值的桶進行JOIN操作就可以,可以大大較少JOIN的數據量。
3、分桶表數據進行抽樣
當數據量特別大時,對全體數據進行處理存在困難時,抽樣就顯得尤其重要了。抽樣可以從被抽取的數據中估計和推斷出整體的特性,是科學實驗、質量檢驗、社會調查普遍采用的一種經濟有效的工作和研究方法。
延伸閱讀1:hive是什么
hive是基于Hadoop的一個數據倉庫工具,用來進行數據提取、轉化、加載,這是一種可以存儲、查詢和分析存儲在Hadoop中的大規模數據的機制。hive數據倉庫工具能將結構化的數據文件映射為一張數據庫表,并提供SQL查詢功能,能將SQL語句轉變成MapReduce任務來執行。Hive的優點是學習成本低,可以通過類似SQL語句實現快速MapReduce統計,使MapReduce變得更加簡單,而不必開發專門的MapReduce應用程序。hive十分適合對數據倉庫進行統計分析。