Hive的基本介紹以及經常使用函數

1、Hive的簡介:

  Hive是基於Hadoop的一個數據倉庫工具,能夠將結構化的數據文件映射爲一張表,並提供類SQL查詢功能。express

優勢:數組

1) 操做接口採用類SQL語法,提供快速開發的能力(簡單、容易上手)。

2) 避免了去寫MapReduce,減小開發人員的學習成本。

3) Hive的執行延遲比較高,所以Hive經常使用於數據分析,對實時性要求不高的場合。

4) Hive優點在於處理大數據,對於處理小數據沒有優點,由於Hive的執行延遲比較高。

5) Hive支持用戶自定義函數,用戶能夠根據本身的需求來實現本身的函數。

缺點:架構

1)Hive的HQL表達能力有限
2)Hive的效率比較低

 

2、Hive的架構圖

          

3、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>

 

4、管理表和外部表

  默認建立的表爲管理表,有時也被稱爲內部表。當咱們刪除一個管理表時,Hive也會刪除這個表中數據。管理表不適合和其餘工具共享數據。  函數

  添加關鍵字external建立的表是外部表,因此Hive並不是認爲其徹底擁有這份數據。刪除該表並不會刪除掉這份數據,不過描述表的元數據信息會被刪除掉。工具

#查詢表的類型
desc formatted stu;
#修改內部表stu爲外部表
alter table stuset tblproperties('EXTERNAL'='TRUE');
#修改外部表stu爲內部表
alter table stuset tblproperties('EXTERNAL'='FALSE');
注意:('EXTERNAL'='TRUE')和('EXTERNAL'='FALSE')爲固定寫法,區分大小寫!

清空表數據:oop

 管理表:truncate table stu;學習

 外部表:alter table stuset tblproperties('EXTERNAL'='FALSE'); 先改爲內部表再執行清空:truncate table stu;大數據

  場景:天天將收集到的網站日誌按期流入HDFS文本文件。在外部表(原始日誌表)的基礎上作大量的統計分析,用到的中間表、結果表使用內部表存儲,數據經過SELECT+INSERT進入內部表。網站

 

5、查詢經常使用函數

1,空字段賦值spa

  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
相關文章
相關標籤/搜索