HIVE基礎java
1,安裝:基於hadoop之上,先安裝hadoop,安裝在另一篇博客有詳細講到。web
2,hive的管理:cli方式,web界面方式數據庫
cli方式:直接輸入#hive --service cli 或者直接輸入hive數組
web界面方式:瀏覽器
- 默認端口號:9999函數
- 啓動方式:#hive --service hwi &oop
- 經過瀏覽器訪問:http://<ip地址>:9999/hwi/fetch
提示:若是出現不能發現web程序的war包,是因爲當前版本中無hwi的war包,請從hive版本的源代碼編譯。spa
3,hive的遠程服務(這是用jdbc或者odbc連接數據倉庫hive必須的前提)操作系統
-端口號 10000
-啓動方式:#hive --service hiveserver &
4,hive基本數據類型:
-整數類型:tinyint、smallint、int、bigint
-浮點數類型:float、double
-布爾類型:boolean
-字符串類型:srting
5,hive複雜數據類型:
-數組:array 由一系列相同的數據類型的元素組成
-集合:map 包含key->value 鍵值對,經過key來訪問元素。
-結構:struct 包含不一樣數據類型的元素,這些元素經過「點語法」的方式來獲得所須要的元素。
6,hive時間類型:
-data:描述特定的日期
-timestamp:是一個數據,時間戳
7,hive的表的類型
內部表(table):與數據庫中的table在概念上相似。
外部表(exrernal table):指向已經在HDFS中存在的數據,能夠建立partition。
分區表(partition):在hive中,表中的一個partition對應於表下的一個目錄,全部的partition的數據都存儲在對應的目錄中。
例:建立基於性別的以逗號分隔的分區表:
create table partition_table(id int, name string ) partitioned by (gender string) row format delimited fields terminated by ',';
桶表(bucket table):桶表是對數據進行哈希取值,而後放在不一樣的文件中存儲。
例:create table bucket_table (id int ,name string,...)
視圖:視圖是虛表,是一個邏輯概念。
HIVE進階
1,hive數據導入:
語法:
load data [local] inpath 'filepath' [overwrite] into table tablename [partition(partcoll = vall, partcol2=val2...)]
[local]:表示從操做系統的硬盤目錄上進行數據導入,若是不寫,表上從hdfs的一個目錄進行導入。
[overwrite]:表示十分要覆蓋表中已經存在的數據。
[partition...:若是是分區表,用此來指明導入到哪一個分區。後面是分區條件。
注意:若是想要把某個目錄下的全部文件都導入到表中,在填入‘filepath’文件路徑時只須要寫文件路徑,不須要指明哪個文件。
2,hive的數據查詢:
查詢語法:
select [all/distinct] select_expr,select_expr,...] from tablename b where xx group by xx clister by xx
tablename b:此操做是在查詢的同時爲了簡化輸入,給表tablename取別名爲b
查詢中使用計算:
在查詢語句時候能夠添加查詢字段自身或者字段之間的相互計算,直接得出結果。
查詢中不計算空值:用 is not null 語句來實現。
fetch task功能:此功能開啓後,執行簡單的(不計算,不排序等)的查詢語句,就不會mp的做業,能夠提升查詢效率。
3,hive函數:
數學函數:round 四捨五入取整 ceil 向上取整 floor 向下取整
字符函數:lower 轉換小寫 upper 轉換大寫 length 顯示字符長度 concat 拼加一個字符串 substr 求字符串的子串
trim 去掉一個字符串先後的空格 lpad 左填充 rpad 右填充
收集函數:size 返回map集合中的個數
select size(map(<key,value>,<key,value>,....)); 返回結果爲2
轉換函數:cast 把不一樣數據轉換成其餘數據類型
select cast (1 as bigint); 把1轉換成bigint類型
日期函數:to_data:取出一個字符串中間日期的部分
year month day :分別取出一個日期中的年月日
weekofyear:返回一個日期在一年中是第幾個星期
datediff:兩個日期相減,返回他們之間的天數。
date_add:在一個日期值上加上多少天
data_sub:在一個日期值上減去多少天
條件函數:coalesce:從左到右找到第一個不爲空的值
case a when b then c else f end:若是a知足b條件時返回c,不然返回f,以end爲結束語。
聚合函數:count sum min max avg
4,hive的錶鏈接:
等值鏈接:以=號爲條件
不等值鏈接:以<,>,<>號爲條件查詢的鏈接
外鏈接:經過外鏈接能夠將對於鏈接條件不成立的記錄任然包含在最後的輸出結果中。
左外鏈接:顯示鏈接條件左邊表中不成立的記錄==select a.x from a left outer join b on a.id=b.id
右外鏈接:顯示鏈接條件右邊表中不成立的記錄==select b.x from b right outer join b on a.id=b.id
自鏈接:經過表的別名將同一張表視爲多張表。
select e.ename,b.bname from emp e, emp b where e.mgr=b.empid; 給一張emp表同時取兩個別名,這樣就認爲是兩張表,就能夠用別名來設置查詢條件。
5,子查詢:查詢條件where裏面嵌套另一個查詢語句
6,hive自定義函數:
建立臨時函數:hive>create temporary function<函數名> as 'java 類名’;
刪除臨時函數:hive>drop temporary function <函數名>;
暫時這麼多。。。。