HIVE----工作常用知識點

Hive中常用的交互式命令

hive -help 查看交互式命令
hive -e 不進入hive的交互窗口執行sql語句;
hive -f 執行腳本中的sql語句,其中使用>輸出到指定目錄下的文件當中(定時任務);
exit 先隱性提交數據,再退出;
quit 不提交數據,退出;


參數配置方式

  1. 配置文件方式
    默認配置文件:hive-default.xml
    用戶自定義配置文件:hive-site.xml
    注意:用戶自定義配置會覆蓋默認配置。
  2. 命令行參數方式
    啓動Hive時,可以在命令行添加-hiveconf param=value來設定參數
    注意:僅對本次hive啓動有效。
  3. 參數聲明方式
    可以在HQL中使用SET關鍵字設定參數
    注意:僅對本次hive啓動有效。

上述三種設定方式的優先級依次遞增。即配置文件<命令行參數<參數聲明。


Hive 數據類型

基本數據類型
Hive數據類型 Java數據類型 長度 例子
TINYINT byte 1byte有符號整數 20
SMALINT short 2byte有符號整數 20
INT int 4byte有符號整數 20
BIGINT long 8byte有符號整數 20
BOOLEAN boolean 布爾類型 TRUE FALSE
FLOAT float 單精度浮點數 3.14159
DOUBLE double 雙精度浮點數 3.14159
STRING string 字符系列 ‘hello’ OR “world!”
TIMESTAMP 時間類型
BINARY 字節數組
複雜數據類型
數據類型 描述
STRUCT 和c語言中的struct類似,都可以通過“點”符號訪問元素內容。例如,如果某個列的數據類型是STRUCT{first STRING, last STRING},那麼第1個元素可以通過字段.first來引用。
MAP MAP是一組鍵-值對元組集合,使用數組表示法可以訪問數據。例如,如果某個列的數據類型是MAP,其中鍵->值對是’first’->’John’和’last’->’Doe’,那麼可以通過字段名[‘last’]獲取最後一個元素
ARRAY 數組是一組具有相同類型和名稱的變量的集合。這些變量稱爲數組的元素,每個數組元素都有一個編號,編號從零開始。例如,數組值爲[‘John’, ‘Doe’],那麼第2個元素可以通過數組名[1]進行引用。

樣例:

name string,
friends array<string>,
children map<string, int>,
address struct<street:string, city:string>
)
row format delimited fields terminated by ','   -- 列分隔符
collection items terminated by '_'   --MAP STRUCT 和 ARRAY 的分隔符(數據分割符號)
map keys terminated by ':'   -- MAP中的key與value的分隔符
lines terminated by '\n';  -- 行分隔符
類型轉換

例如:CAST('1' AS INT)將把字符串’1’ 轉換成整數1;如果強制類型轉換失敗,如執行CAST('X' AS INT),表達式返回空值 NULL


DDL數據定義

  • 數據庫創建
    create database if not exists db_hive location '/db_hive2.db';– 腳本中按照某種規律來建庫並放在指定位置,避免db_hive already exists異常;
  • 數據庫刪除
    drop database if exists db_hive2; – 刪除空數據庫
    drop database db_hive cascade;–刪除數據庫,不管是不是空
  • 創建表
[(col_name data_type [COMMENT col_comment], ...)] 
[COMMENT table_comment] 
[PARTITIONED BY (col_name data_type [COMMENT col_comment], ...)] 
[CLUSTERED BY (col_name, col_name, ...) 
[SORTED BY (col_name [ASC|DESC], ...)] INTO num_buckets BUCKETS] 
[ROW FORMAT row_format] 
[STORED AS file_format] 
[LOCATION hdfs_path]

1.CREATE TABLE 創建一個指定名字的表。如果相同名字的表已經存在,則拋出異常;用戶可以用 IF NOT EXISTS 選項來忽略這個異常。
2. EXTERNAL關鍵字可以讓用戶創建一個外部表,在建表的同時指定一個指向實際數據的路徑(LOCATION)Hive創建內部表時,會將數據移動到數據倉庫指向的路徑;若創建外部表,僅記錄數據所在的路徑,不對數據的位置做任何改變。在刪除表的時候,內部表的元數據和數據會被一起刪除,而外部表只刪除元數據,不刪除數據。
3.COMMENT:爲表和列添加註釋。
4. PARTITIONED BY創建分區表
5. CLUSTERED BY創建分桶表
6. SORTED BY不常用
7.ROW FORMAT

DELIMITED [FIELDS TERMINATED BY char] [COLLECTION ITEMS TERMINATED BY char]
        [MAP KEYS TERMINATED BY char] [LINES TERMINATED BY char] 
   | SERDE serde_name [WITH SERDEPROPERTIES (property_name=property_value, property_name=property_value, ...)]

用戶在建表的時候可以自定義SerDe或者使用自帶的SerDe。如果沒有指定ROW FORMAT或者ROW FORMAT DELIMITED,將會使用自帶的SerDe。在建表的時候,用戶還需要爲表指定列,用戶在指定表的列的同時也會指定自定義的SerDeHive通過SerDe確定表的具體的列的數據。
SerDe是Serialize/Deserilize的簡稱,目的是用於序列化和反序列化。
8. STORED AS指定存儲文件類型
常用的存儲文件類型:SEQUENCEFILE(二進制序列文件)、TEXTFILE(文本)、RCFILE(列式存儲格式文件)
如果文件數據是純文本,可以使用STORED AS TEXTFILE。如果數據需要壓縮,使用 STORED AS SEQUENCEFILE
9.LOCATION:指定表在HDFS上的存儲位置。
10.LIKE允許用戶複製現有的表結構,但是不復制數據。


內部表Hive會(或多或少地)控制着數據的生命週期。Hive默認情況下會將這些表的數據存儲在由配置項hive.metastore.warehouse.dir(例如,/user/hive/warehouse)所定義的目錄的子目錄下。當我們刪除一個內部表時,Hive也會刪除這個表中數據。管理表不適合和其他工具共享數據。

  • 根據查詢結果創建表(查詢的結果會添加到新創建的表中)
    create table if not exists student3 as select id, name from student;
  • 根據已經存在的表結構創建表
    create table if not exists student4 like student;

外部表EXTERNAL聲明),Hive並非認爲其完全擁有這份數據。刪除該表並不會刪除掉這份數據,不過描述表的元數據信息會被刪除掉。

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

  • 外部數據寫入
    load data local inpath '/opt/module/datas/dept.txt' into table default.dept;

MANAGED_TABLE、外EXTERNAL_TABLE部錶轉換
  • 修改內部表user_log爲外部表
    alter table user_log set tblproperties('EXTERNAL'='TRUE');
  • 修改外部表user_log爲內部表
    alter table user_logset tblproperties('EXTERNAL'='FALSE');

分區表,實際上就是對應一個HDFS文件系統上的獨立的文件夾,該文件夾下是該分區所有的數據文件。Hive中的分區就是分目錄,把一個大的數據集根據業務需要分割成小的數據集。在查詢時通過WHERE子句中的表達式選擇查詢所需要的指定的分區,這樣的查詢效率會提高很多。

在這裏插入圖片描述


DML數據定義

  • 數據導入
    hive> load data [local] inpath '/opt/module/datas/student.txt' overwrite | into table student [partition (partcol1=val1,…)];
    (1)load data:表示加載數據
    (2)local:表示從本地加載數據到hive表;否則從HDFS加載數據到hive表
    (3)inpath:表示加載數據的路徑
    (4)overwrite:表示覆蓋表中已有數據,否則表示追加
    (5)into table:表示加載到哪張表
    (6)student:表示具體的表
    (7)partition:表示上傳到指定分區
    (0)創建一張表
試例
  • 創建一張表
    hive (default)> create table user_info(id string, name string) row format delimited fields terminated by '\t';
    (1)加載本地文件到hive
    hive (default)> load data local inpath '/opt/module/datas/user_info.txt' into table default.user_info;
    (2)加載HDFS文件到hive
    上傳文件到HDFS
    hive (default)> dfs -put /opt/module/datas/user_info.txt /user/atguigu/hive;
    加載HDFS上數據
    hive (default)> load data inpath '/user/atguigu/hive/user_info.txt' into table default.user_info;
    (3)加載數據覆蓋表中已有的數據
    上傳文件到HDFS
    hive (default)> dfs -put /opt/module/datas/user_info.txt /user/atguigu/hive;
    加載數據覆蓋表中已有的數據
    hive (default)> load data inpath '/user/atguigu/hive/user_info.txt' overwrite into table default.user_info;
- 使用核心

having與where不同點
(1)where針對表中的列發揮作用,查詢數據;having針對查詢結果中的列發揮作用,篩選數據;
(2)同group by同時使用時,where先過濾後聚合,having先聚合後過濾;
(3)having只用於group by分組統計語句。

Join連接
在這裏插入圖片描述

行轉列
CONCAT(string A/col, string B/col…):返回輸入字符串連接後的結果,支持任意個輸入字符串;
CONCAT_WS(separator, str1, str2,...):它是一個特殊形式的 CONCAT()。第一個參數剩餘參數間的分隔符。分隔符可以是與剩餘參數一樣的字符串。如果分隔符是 NULL,返回值也將爲 NULL。這個函數會跳過分隔符參數後的任何 NULL 和空字符串。分隔符將被加到被連接的字符串之間;
COLLECT_SET(col):函數只接受基本數據類型,它的主要作用是將某字段的值進行去重彙總,產生array類型字段。

列轉行
EXPLODE(col):hive一列中複雜的array或者map結構拆分成多行。
LATERAL VIEW
用法:LATERAL VIEW udtf(expression) tableAlias AS columnAlias
解釋:用於和split, explodeUDTF一起使用,它能夠將一列數據拆成多行數據,在此基礎上可以對拆分後的數據進行聚合。

窗口函數
OVER():指定分析函數工作的數據窗口大小,這個數據窗口大小可能會隨着行的變而變化
CURRENT ROW:當前行
n PRECEDING:往前n行數據
n FOLLOWING:往後n行數據
UNBOUNDED:起點,UNBOUNDED PRECEDING表示從前面的起點, UNBOUNDED FOLLOWING表示到後面的終點
LAG(col,n):往前第n行數據
LEAD(col,n):往後第n行數據
NTILE(n):把有序分區中的行分發到指定數據的組中,各個組有編號,編號從1開始,對於每一行,NTILE返回此行所屬的組的編號。注意:n必須爲int類型。

排序
RANK() :排序相同時會重複,總數不會變
DENSE_RANK():排序相同時會重複,總數會減少
ROW_NUMBER():會根據順序計算

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章