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 的結果對存在的並列現象會全部顯...