hive小知識(牢記)

2021-10-03 14:09:04 字數 4425 閱讀 3114

1.external 關鍵字可以讓使用者建立乙個外部表,在建表的同時指定乙個指向實際資料的路徑(location), hive 建立內部表時,會將資料移動到資料倉儲指向的路徑;若建立外部表,僅記錄資料所在的路徑,不對資料的位置做任何改變。在刪除表的時候,內部表的元資料和資料會被一起刪除,而外部表只刪除元資料,不刪除資料。

2.stored as 指定儲存檔案型別常用的儲存檔案型別: sequencefile(二進位制序列檔案)、 textfile(文字)、

rcfile(列式儲存格式檔案)如果檔案資料是純文字,可以使用 stored as textfile。如果資料需要壓縮,

使用 stored as sequencefile。

3.預設建立的表都是所謂的管理表,有時也被稱為內部表。因為這種表, hive 會(或多或少地) 控制著資料的生命週期。 hive 預設情況下會將這些表的資料儲存在由配置項hive.metastore.warehouse.dir(例如, /user/hive/warehouse)所定義的目錄的子目錄下。 當 我 們刪除乙個管理表時, hive 也會刪除這個表中資料。 

4.cluser by

當 distribute by 和 sorts by 字段相同時,可以使用 cluster by 方式。cluster by 除了具有 distribute by 的功能外還兼具 sort by 的功能。但是排序只能是公升序排序, 不能指定排序規則為 asc 或者 desc。

5.分桶

分割槽針對的是資料的儲存路徑;分桶針對的是資料檔案。分割槽提供乙個隔離資料和優化查詢的便利方式。不過,並非所有的資料集都可形成合理的分割槽,特別是之前所提到過的要確定合適的劃分大小這個疑慮。分桶是將資料集分解成更容易管理的若干部分的另乙個技術。

6.空欄位賦值

nvl: 給值為 null 的資料賦值, 它的格式是 nvl( string1, replace_with)。它的功能是如果

string1 為 null,則 nvl 函式返回 replace_with 的值,否則返回 string1 的值,如果兩個參

數都為 null ,則返回 null。

7.行轉列

concat(string a/col, string b/col…):返回輸入字串連線後的結果,支援任意個輸入字串;

concat_ws(separator, str1, str2,...):它是乙個特殊形式的 concat()。第乙個引數剩餘引數間的分隔符。分隔符可以是與剩餘引數一樣的字串。如果分隔符是 null,返回值也將為 null。這個函式會跳過分隔符引數後的任何 null 和空字串。分隔符將被加到被連線的字串之間;

collect_set(col):函式只接受基本資料型別,它的主要作用是將某字段的值進行去重彙總,產生 array 型別字段。

8.列轉行

explode(col): 將 hive 一列中複雜的 array 或者 map 結構拆分成多行。

lateral view

用法: lateral view udtf(expression) tablealias as columnalias

解釋:用於和 split, explode 等 udtf 一起使用,它能夠將一列資料拆成多行資料,在此基礎上可以對拆分後的資料進行聚合。

8.視窗函式

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 型別。

9.rank

rank() 排序相同時會重複,總數不會變

dense_rank() 排序相同時會重複,總數會減少

row_number() 會根據順序計算

10.函式

1) udf(user-defined-function)

一進一出

(2) udaf(user-defined aggregation function)

聚集函式,多進一出

類似於: count/max/min

(3) udtf(user-defined table-generating functions)

一進多出

如 lateral view explore()

程式設計步驟

(1)繼承 org.apache.hadoop.hive.ql.udf

(2)需要實現 evaluate 函式; evaluate 函式支援過載;

(3) 在 hive 的命令列視窗建立函式

a)新增 jar

add jar linux_jar_path

b)建立 function

create [temporary] function [dbname.]function_name as

class_name;

(4)在 hive 的命令列視窗刪除函式

drop [temporary] function [if exists]

[dbname.]function_name;

11.壓縮

開啟 map 輸出階段壓縮可以減少 job 中 map 和 reduce task 間資料傳輸量。

1.開啟 hive 中間傳輸資料壓縮功能

hive (default)>set hive.exec.compress.intermediate=true;

2.開啟 mapreduce 中 map 輸出壓縮功能

hive (default)>set mapreduce.map.output.compress=true;

3.設定 mapreduce 中 map 輸出資料的壓縮方式

hive (default)>set mapreduce.map.output.compress.codec=

4.執行查詢語句

hive (default)> select count(ename) name from emp;

開啟 reduce 輸出階段壓縮

當 hive 將 輸 出 寫 入 到 表 中 時 , 輸 出 內 容 同 樣 可 以 進 行 壓 縮 。 屬 性hive.exec.compress.output 控制著這個功能。使用者可能需要保持預設設定檔案中的預設值false,這樣預設的輸出就是非壓縮的純文字檔案了。使用者可以通過在查詢語句或執行指令碼設定這個值為 true,來開啟輸出結果壓縮功能。

1.開啟 hive 最終輸出資料壓縮功能

hive (default)>set hive.exec.compress.output=true;

2.開啟 mapreduce 最終輸出資料壓縮

hive (default)>set

mapreduce.output.fileoutputformat.compress=true;

3.設定 mapreduce 最終資料輸出壓縮方式

hive (default)> set

mapreduce.output.fileoutputformat.compress.codec =

4.設定 mapreduce 最終資料輸出壓縮為塊壓縮

hive (default)> set

mapreduce.output.fileoutputformat.compress.type=block;

5.測試一下輸出結果是否是壓縮檔案

hive (default)> insert overwrite local directory

'/opt/module/datas/distribute-result' select * from emp

distribute by deptno sort by empno desc;

12.檔案儲存格式

hive 支援的儲存數的格式主要有: textfile 、 sequencefile、 orc、 parquet。

textfile 和 sequencefile 的儲存格式都是基於行儲存的;

orc 和 parquet 是基於列式儲存的。

1. 行儲存的特點

查詢滿足條件的一整行資料的時候,列儲存則需要去每個聚集的字段找到對應的每個列

的值,行儲存只需要找到其中乙個值,其餘的值都在相鄰地方, 所以此時行儲存查詢的速度

更快。2. 列儲存的特點

因為每個欄位的資料聚集儲存,在查詢只需要少數幾個欄位的時候,能大大減少讀取的

資料量;每個欄位的資料型別一定是相同的,列式儲存可以針對性的設計更好的設計壓縮算

法。

Hive知識之Hive基礎

5 hive的基本操作 5.2 資料表相關操作 6 資料的匯入和匯出 1 hive簡介 2 hive與傳統關係型資料庫的比較 專案hive rdbms 查詢語言 hqlsql 資料儲存 hdfs raw device or local fs 執行mapreduce excuter 執行延遲高低 處理...

Hive 知識梳理

1 order by,sort by,distribute by,cluster by 背景表結構 在講解中我們需要貫串乙個 例子,所以需要設計乙個情景,對應 還要有乙個表結構和填充資料。如下 有 3 個字段,分別為 personid 標識某乙個人,company 標識一家公司名稱,money 標識...

hive相關知識

hivesql的相關知識 1.union 和 union all的區別 兩個都能進行全連線,但是表字段名稱需要相同。不同的是union連線後的結果去重,union all的結果不去重 2.rank over 和row number over 的區別 rank over 的結果對存在的並列現象會全部顯...