HIVE特征
-
Hive 只適合用來做海量離線數 據統計分析,也就是資料倉庫
-
Hive 中所有的資料都存盤在 HDFS 中,沒有專門的資料存盤格式,因為 Hive 是讀模式 (Schema On Read),可支持 TextFile,SequenceFile,RCFile 或者自定義格式等
HIVE語法
基礎語法
CREATE [EXTERNAL] TABLE [IF NOT EXISTS] table_name
[(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]
語法對比
- Sort By:對于大規模的資料集order by的效率非常低,在很多情況下,并不需要全域排序,此時可以使用sort by,按照磁區排序,
- Sort by為每個reducer產生一個排序檔案,每個Reducer內部進行排序,對全域結果集來說不是排序
# 設定reduce個數
set mapreduce.job.reduces=3;
# 查看設定reduce個數
set mapreduce.job.reduces;
# 根據部門編號降序查看員工資訊
select * from emp sort by deptno desc;
# 將查詢結果匯入到檔案中(按照部門編號降序排序)
insert overwrite local directory '/home/xuzheng/datas/sortby-result' select * from emp sort by deptno desc;
- Distribute By: 在有些情況下,我們需要控制某個特定行應該到哪個reducer,通常是為了進行后續的聚集操作,distribute by 子句可以做這件事,distribute by類似MR中partition(自定義磁區),進行磁區,結合sort by使用
- Hive要求DISTRIBUTE BY陳述句要寫在SORT BY陳述句之
# 設定reduce個數
set mapreduce.job.reduces=3;
# 先按照部門編號磁區,再按照員工編號降序排序
select * from emp distribute by deptno sort by empno desc;
- 當distribute by和sorts by欄位相同時,可以使用cluster by方式
- cluster by除了具有distribute by的功能外還兼具sort by的功能,但是排序只能是升序排序,不能指定排序規則為ASC或者DESC
# 按照部門編號磁區排序
select * from emp cluster by deptno;
# 與上面陳述句等價
select * from emp distribute by deptno sort by deptno;
- ROW_NUMBER、RANK和DENSE_RANK的區別
row_number: 按順序編號,不留空位
rank: 按順序編號,相同的值編相同號,留空位
dense_rank: 按順序編號,相同的值編相同的號,不留空位
執行語法
hive [-hiveconf x=y]* [<-i filename>]* [<-f filename>|<-e query-string>] [-S]
1、-i 從檔案初始化 HQL
2、-e 從命令列執行指定的 HQL
3、-f 執行 HQL 腳本
4、-v 輸出執行的 HQL 陳述句到控制臺
5、-p connect to Hive Server on port number
6、-hiveconf x=y(Use this to set hive/hadoop configuration variables)
7、-S:表示以不列印日志的形式執行命名操作
HIVE內部架構
hive的內部架構由四部分組成:
- 用戶介面
- 跨語言服務
- 底層的Driver
- 元資料存盤系統
HIVE資料表
1、Hive資料庫相關的元資料表(DBS、DATABASE_PARAMS)
- DBS —— 存盤Hive中所有資料庫的基本資訊
- DATABASE_PARAMS —— 該表存盤資料庫的相關引數,在CREATE DATABASE時候用
2、Hive表和視圖相關的元資料表(TBLS、TABLE_PARAMS、TBL_PRIVS)
- TBLS —— 該表中存盤Hive表、視圖、索引表的基本資訊
- TABLE_PARAMS —— 該表存盤表/視圖的屬性資訊
- TBL_PRIVS —— 該表存盤表/視圖的授權資訊
3、Hive檔案存盤資訊相關的元資料表(SDS、SD_PARAMS、SERDES、SERDE_PARAMS)
由于HDFS支持的檔案格式很多,而建Hive表時候也可以指定各種檔案格式,Hive在將HQL決議成MapReduce時候,需要知道去哪里,使用哪種格式去讀寫HDFS檔案,而這些資訊就保存在這幾張表中,
- SDS —— 該表保存檔案存盤的基本資訊,如INPUT_FORMAT、OUTPUT_FORMAT、是否壓縮等,TBLS表中的SD_ID與該表關聯,可以獲取Hive表的存盤資訊,
- SD_PARAMS —— 該表存盤Hive存盤的屬性資訊,在創建表時候使用
- SERDES —— 該表存盤序列化使用的類資訊
- SERDE_PARAMS —— 該表存盤序列化的一些屬性、格式資訊,比如:行、列分隔符
4、Hive表欄位相關的元資料表(COLUMNS_V2)
- COLUMNS_V2 —— 該表存盤表對應的欄位資訊
5、Hive表磁區相關的元資料表(PARTITIONS、PARTITION_KEYS、PARTITION_KEY_VALS、PARTITION_PARAMS)
- PARTITIONS —— 該表存盤表磁區的基本資訊
- PARTITION_KEYS —— 該表存盤磁區的欄位資訊
- PARTITION_KEY_VALS —— 該表存盤磁區欄位值
- PARTITION_PARAMS —— 該表存盤磁區的屬性資訊
HIVE連接的方法
- CLI連接
- HiveServer2/beeline
- Web UI
Hive 的視圖和關系型資料庫的視圖區別
和關系型資料庫一樣,Hive 也提供了視圖的功能,不過請注意,Hive 的視圖和關系型資料庫的資料還是有很大的區別:
-
只有邏輯視圖,沒有物化視圖;
-
視圖只能查詢,不能 Load/Insert/Update/Delete 資料;
-
視圖在創建時候,只是保存了一份元資料,當查詢視圖的時候,才開始執行視圖對應的 那些子查詢
更多資料可以參考:
HIVE系列快速入門
HIVE筆記,來自作者—哈工大的許政
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/264117.html
標籤:其他
下一篇:Echarts實作帶刻度的餅圖
