一、Hive的簡介:
Hive是基於Hadoop的一個數據倉庫工具,可以將結構化的數據文件映射為一張表,並提供類SQL查詢功能。
優點:
1) 操作接口採用類SQL語法,提供快速開發的能力(簡單、容易上手)。 2) 避免了去寫MapReduce,減少開發人員的學習成本。 3) Hive的執行延遲比較高,因此Hive常用於數據分析,對實時性要求不高的場合。 4) Hive優勢在於處理大數據,對於處理小數據沒有優勢,因為Hive的執行延遲比較高。 5) Hive支持用戶自定義函數,用戶可以根據自己的需求來實現自己的函數。
缺點:
1)Hive的HQL表達能力有限 2)Hive的效率比較低
二、Hive的架構圖
三、Hive的數據類型
基本數據類型: Hive數據類型 Java數據類型 TINYINT byte SMALINT short INT int BIGINT long BOOLEAN boolean FLOAT float DOUBLE double STRING string TIMESTAMP 時間類型 BINARY 字節數組 集合 STRUCT 和c語言中的struct類似,都可以通過“點”符號訪問元素內容。例如,如果某個列的數據類型是STRUCT{first STRING, last STRING},那麼第1個元素可以通過字段.first來引用。
struct() 例如struct<street:string, city:string> MAP MAP是一組鍵-值對元組集合,使用數組表示法可以訪問數據。例如,如果某個列的數據類型是MAP,其中鍵->值對是’first’->’John’和’last’->’Doe’,那麼可以通過字段名[‘last’]獲取最後一個元素
map() 例如map<string, int> ARRAY 數組是一組具有相同類型和名稱的變量的集合。這些變量稱為數組的元素,每個數組元素都有一個編號,編號從零開始。例如,數組值為[‘John’, ‘Doe’],那麼第2個元素可以通過數組名[1]進行引用。
Array() 例如array<string>
四、管理表和外部表
默認創建的表為管理表,有時也被稱為內部表。當我們刪除一個管理表時,Hive也會刪除這個表中數據。管理表不適合和其他工具共享數據。
添加關鍵字external創建的表是外部表,所以Hive並非認為其完全擁有這份數據。刪除該表並不會刪除掉這份數據,不過描述表的元數據信息會被刪除掉。
#查詢表的類型 desc formatted stu; #修改內部表stu為外部表 alter table stuset tblproperties('EXTERNAL'='TRUE'); #修改外部表stu為內部表 alter table stuset tblproperties('EXTERNAL'='FALSE');
注意:('EXTERNAL'='TRUE')和('EXTERNAL'='FALSE')為固定寫法,區分大小寫!
清空表數據:
管理表:truncate table stu;
外部表:alter table stuset tblproperties(‘EXTERNAL’=’FALSE’); 先改成內部表再執行清空:truncate table stu;
場景:每天將收集到的網站日誌定期流入HDFS文本文件。在外部表(原始日誌表)的基礎上做大量的統計分析,用到的中間表、結果表使用內部表存儲,數據通過SELECT+INSERT進入內部表。
五、查詢常用函數
1,空字段賦值
NVL( value,default_value)
2,when
case 字段 when 值 then 替換值 else 替換值 end 同 if(boolean,值,另外值)
3,行轉列
CONCAT(string A/col, string B/col…):返回輸入字符串連接后的結果,支持任意個輸入字符串; CONCAT_WS(separator, str1, str2,...):它是一個特殊形式的 CONCAT()。第一個參數剩餘參數間的分隔符。分隔符可以是與剩餘參數一樣的字符串。如果分隔符是 NULL,返回值也將為 NULL。這個函數會跳過分隔符參數后的任何 NULL 和空字符串。分隔符將被加到被連接的字符串之間; 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() 會根據順序計算
7,時間
#均只適合yyyy-MM-dd HH:mm:ss格式的時間,當然時分秒可以省略 date_format:格式化時間select date_format('2020-06-04','yyyy-MM');2020-06 date_add: 時間跟天數相加select date_add('2020-06-04',5);2020-06-09 date_sub: 時間跟天數相減select date_sub('2020-06-04',5);2020-05-30 datediff: 兩個時間相減select datediff('2020-06-04','2020-05-10');25 year: 獲取年select year('2020-06-04');2020 month: 獲取月份select month('2020-06-04');04 day: 獲取日select day('2020-06-04');04
格式轉換
regexp_replace: 字段,原格式,替換的格式;select regexp_replace('2020/05/04','/','-');2020-05-04
本站聲明:網站內容來源於博客園,如有侵權,請聯繫我們,我們將及時處理
【其他文章推薦】
※回頭車貨運收費標準
※產品缺大量曝光嗎?你需要的是一流包裝設計!
※自行創業缺乏曝光? 網頁設計幫您第一時間規劃公司的形象門面
※推薦評價好的iphone維修中心
※教你寫出一流的銷售文案?
※台中搬家公司教你幾個打包小技巧,輕鬆整理裝箱!
※台中搬家遵守搬運三大原則,讓您的家具不再被破壞!