Hive以及常用函式介紹和總結

2021-09-24 12:12:00 字數 4261 閱讀 7355

hive是基於hadoop的乙個資料倉儲工具,可以將結構化的資料檔案對映為一張資料庫表,並提供簡單的sql查詢功能,可以將sql語句轉換為mapreduce任務進行執行。 其優點是學習成本低,可以通過類sql語句快速實現簡單的mapreduce統計,不必開發專門的mapreduce應用,十分適合資料倉儲的統計分析。

hive 沒有專門的資料格式。 hive 可以很好的工作在 thrift 之上,控制分隔符,也允許使用者指定資料格式。

hive-mysql

hive

mysql

查詢語言

hqlsql

資料儲存

hdfs

磁碟上資料格式

使用者自定義

系統定義格式

資料更新

不支援更新、只可讀,不可寫

支援資料更新

執行mr

excutor

延遲高(全量掃瞄整個表)

低處理規模大小

索引0.8版本之後加入圖索引,通過mapreduce暴力掃瞄整個資料

有複雜的索引

可擴充套件性

與hadoop一致支援可擴充套件性

acid 語義的嚴格限制,擴充套件行非常有限

hive-hbase

hbase

hive

型別列式資料庫

資料倉儲

內部機制

資料庫引擎

mr增刪改查

都支援只支援匯入和查詢

schema

需要預先定義列族,不需要具體到列可以動態修改

需要預先定義**

應用場景

實時離線

特點k-v

類sql

特徵hbase是低延遲、非結構化和面向程式設計的

hive是高延遲、結構化和面向分析

mysql-hbase

hbase

mysql

資料庫nosql型別

關係型資料庫儲存列

行資料量大小

結構操作

非結構式資料跟結構化的資料插入修改查詢一些簡單操作

結構化的資料/複雜操作

2.1 json字串處理:get_json_objectlateral viewexplodesubstrjson_tuple

語法: get_json_object(string json_string, string path)

返回值: string

說明:解析json的字串json_string,返回path指定的內容。如果輸入的json字串無效,那麼返回null。

語法: explode(array),經常和lateral view一起使用

返回值: 多行

說明: 將陣列中的元素拆分成多行顯示

語法: substr(string a, int start, int len),substring(string a, int start, int len)

返回值: string

說明:返回字串 a 從 start 位置開始,長度為 len 的字串

語法: json_tuple(string json_string, col1, col2, …) ,經常和lateral view一起使用

返回值: string

說明:同時解析多個json字串中的多個字段

語法: parse_url(string urlstring, string parttoextract , string keytoextract)

返回值: string

說明:返回 url 中指定的部分。 parttoextract 的有效值為: host, path, query, ref,

protocol, authority, file, and userinfo

語法: regexp_replace(string a, string b, string c)

返回值: string

說明:將字串 a 中的符合正規表示式 b 的部分替換為 c

語法: regexp_extract(string subject, string pattern, int index)

返回值: string

說明:將字串 subject 按照 pattern 正規表示式的規則拆分,返回 index 指定的字元

語法: collect_set (col)

返回值: array

說明: 將 col 字段進行去重, 合併成乙個陣列

語法: collect_list (col)

返回值: array

說明: 將 col 字段合併成乙個陣列,不去重

語法: concat(string a, string b…)

返回值: string

說明:返回輸入字串連線後的結果,支援任意個輸入字串

語法: concat_ws(string sep, string a, string b…)

返回值: string

說明:返回輸入字串連線後的結果, sep 表示各個字串間的分隔符

語法: datediff(string enddate, string startdate)

返回值: int

說明: 返回結束日期減去開始日期的天數。日期的格式需要是yyyy-mm-dd,或者yyyy-mm-dd hh:mm:ss

語法: from_unixtime(bigint unixtime[, string format])

返回值: string

說明: 轉化 unix 時間戳(從 1970-01-01 00:00:00 utc 到指定時間的秒數)到當前時區的時間格式,預設的format是yyyy-mm-dd hh:mm:ss,可以指定別的

語法: unix_timestamp(string date[, string format])

返回值: bigint

說明: 轉換 pattern 格式的日期到 unix 時間戳。如果轉化失敗,則返回 0。預設的format是yyyy-mm-dd hh:mm:ss,可以指定別的

語法: to_date(string timestamp)

返回值: string

說明: 返回日期時間欄位中的日期部分

語法: coalesce(t v1, t v2, …)

返回值: t

說明: 返回引數中的第乙個非空值;如果所有值都為 null,那麼返回 null

總結:

hive、mysql和hbase都是我們數倉資料儲存的一種方式,資料結構的儲存有一些差異,查詢方式也存在一些差異,各家公司會根據不同的業務場景和不同階段,選擇不同的資料儲存方式,我們在實際運用中可以,因地制宜、可以現學現賣。

參考文章3:hbase,hive,mysql區別完全弄懂

Hive常用函式

if判斷 select if 1 1,yes no 返回yes 語法 case expression when condition1 then result1 when condition2 then result2 else result end 例子 case a when 1 then one...

hive常用函式

hive常用函式 1 檢視函式用法 desc function 函式名 desc function extended 函式名 2 獲取array陣列長度 size函式 select size collect list field from table select size split hello ...

Hive常用函式

常用日期函式 unix timestamp 返回當前或指定時間的時間戳 from unixtime 將時間戳轉為日期格式 current date 當前日期 current timestamp 當前的日期加時間 to date 抽取日期部分 year 獲取年 month 獲取月 day 獲取日 ho...