hive中map相關函數總結

目錄

  • hive官方函數解釋
  • 示例
  • 實戰

hive官方函數解釋

hive官網函數大全地址: hive官網函數大全地址

Return TypeNameDescription
mapmap(key1, value1, key2, value2, …)Creates a map with the given key/value pairs.
arraymap_values(Map<K.V>)Returns an unordered array containing the values of the input map.
arraymap_keys(Map<K.V>)Returns an unordered array containing the keys of the input map.
map<string,string>str_to_map(text[, delimiter1, delimiter2])Splits text into key-value pairs using two delimiters. Delimiter1 separates text into K-V pairs, and Delimiter2 splits each K-V pair. Default delimiters are ‘,’ for delimiter1 and ‘:’ for delimiter2.
Tkey,Tvalueexplode(MAP<Tkey,Tvalue> m)Explodes a map to multiple rows. Returns a row-set with a two columns (key,value) , one row for each key-value pair from the input map. (As of Hive 0.8.0.).

示例

1、map(key1, value1, key2, value2, …)

SELECT map('name', '張三', 'age', 20, 'gender', '男') AS student;
---結果:
student	
{"age":"20","gender":"男","name":"張三"}

2、map_values(Map<K.V>)

SELECT map_keys(map('name', '張三', 'age', 20, 'gender', '男')) AS keys;
---結果:
keys
["name","age","gender"]

3、map_values(Map<K.V>)

SELECT map_values(map('name', '張三', 'age', 20, 'gender', '男')) AS values;
---結果:
values	
["張三","20","男"]

4、str_to_map(str, delimiter1, delimiter2)
str_to_map 函數用于將一個字符串轉換為 Map 對象。具體來說,str_to_map 函數會將一個由鍵值對組成的字符串解析成一個 Map 對象,其中鍵和值之間使用指定的分隔符進行分隔。其中,str 是要轉換的字符串,delimiter1 是鍵值對之間的分隔符,delimiter2 是鍵和值之間的分隔符。默認情況下,delimiter1 的值是 ‘,’,delimiter2 的值是 ‘:’。

SELECT str_to_map('name:張三,age:20,gender:男', ',', ':') AS student;
---結果:
student	
{"age":"20","gender":"男","name":"張三"}SELECT str_to_map('name=張三,age=20,gender=男', ',', '=') AS student;
---結果:
student	
{"age":"20","gender":"男","name":"張三"}

5、explode (map)

select explode(map('A',10,'B',20,'C',30));
select explode(map('A',10,'B',20,'C',30)) as (key,value);
select tf.* from (select 0) t lateral view explode(map('A',10,'B',20,'C',30)) tf;
select tf.* from (select 0) t lateral view explode(map('A',10,'B',20,'C',30)) tf as key,value;
---上述四個結果均為:
key     value
A       10	
B       20	
C       30

實戰

給出一組學生數據,有名字,課程,等級,分數等字段,現在求每門課的情況,包含平均成績,及這門課包含哪些學生及學生的等級

with stud as
( select  'zhang3' as name ,'優' as grade  ,'math' as course ,'88' as score  union all select  'li4' as name ,'良' as grade  ,'math' as course ,'72' as scoreunion all select  'zhao6' as name ,'差' as grade  ,'math' as course ,'44' as scoreunion all select  'wang5' as name ,'優' as grade  ,'chinese' as course ,'80' as scoreunion all select  'zhao6' as name ,'優' as grade  ,'chinese' as course ,'55' as scoreunion all select  'tian7' as name ,'優' as grade  ,'chinese' as course ,'75' as score
)--sql1
select course, collect_set(concat(name,':',grade)) as collect , avg(score) from stud group by course;
---結果:
course             collect                                             avg(score)	
math        ["li4:良","zhao6:差","zhang3:優"]                           68.0
chinese     ["wang5:優","tian7:優","zhao6:優"]                          70.0
----sql2
select course, concat_ws(',',collect_set(concat(name,':',grade))) as strings , avg(score) from stud group by course;
---結果:
course                      strings                                        avg(score)
math             li4:良,zhao6:差,zhang3:優                                  68.0
chinese          wang5:優,tian7:優,zhao6:優                                 70.0
----sql3
select course, str_to_map(concat_ws(',',collect_set(concat(name,':',grade))),',',':') as maps , avg(score) from stud group by course;
---結果:
course                               maps                              avg(score)	
math                 {"li4":"良","zhang3":"優","zhao6":"差"}             68.0
chinese              {"tian7":"優","wang5":"優","zhao6":"優"}            70.0

注意:
第一種sql,collect 字段的類型是array;第二種sql,strings字段的類型是string;第三種sql,maps字段的類型是map;
問題來了,能否在第二種的基礎上,實現第一種和第三種的結果,且字段類型是string;
下面實現第二種轉化為第三種,實際上就是map格式轉換成json字符串;

with stud as
( select  'zhang3' as name ,'優' as grade  ,'math' as course ,'88' as score  union all select  'li4' as name ,'良' as grade  ,'math' as course ,'72' as scoreunion all select  'zhao6' as name ,'差' as grade  ,'math' as course ,'44' as scoreunion all select  'wang5' as name ,'優' as grade  ,'chinese' as course ,'80' as scoreunion all select  'zhao6' as name ,'優' as grade  ,'chinese' as course ,'55' as scoreunion all select  'tian7' as name ,'優' as grade  ,'chinese' as course ,'75' as score
)select 
course
,concat('{"',string2,'"}') as string3
from  
(select 
course
,regexp_replace(string1,'\\,','\\"\\,\\"') as string2
from  
(
select course,concat_ws(',', collect_list(concat_ws('":"', k,v) ) ) as string1
from (
select course, str_to_map(concat_ws(',',collect_set(concat(name,':',grade))),',',':') as maps , avg(score) 
from stud group by course
)test_map_1
lateral view outer explode(maps) kv as k,v
group by course
) tt 
) tm ---結果:
course                               string3                            	
math                 {"li4":"良","zhang3":"優","zhao6":"差"}           
chinese              {"tian7":"優","wang5":"優","zhao6":"優"}        

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/251124.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/251124.shtml
英文地址,請注明出處:http://en.pswp.cn/news/251124.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【前端統計圖】echarts改變顏色屬性的demo

一&#xff1a;柱狀圖改變顏色 圖片.png代碼&#xff1a; <!DOCTYPE html> <html><head><meta charset"UTF-8"><title></title></head><body><!-- 柱狀統計圖 --><div class"row"><div …

DOM-1 DOM初探、JS對象、XML、幻燈片案例展示

DOM DOM —— Document Object Model(文檔對象模型)DOM 對象 → 宿主對象&#xff08;是瀏覽器提供的&#xff09;通過瀏覽器提供的方法表示或操作HTML和XML不能操作css標簽&#xff1a;<></>對元素&#xff1a;<>及內部的內容,getElementsByTagName獲取的是…

http --- 密碼、密鑰、對稱(公開)密鑰加密系統、數字簽名、數字證書的一些概念

密碼(cipher) // 密碼是一套編碼方案和使用相應解碼方式的結合體 // *明文:使用密碼加密之前的稱為明文 // *密文:使用密碼進行加密的稱為密文最初的密碼是相當簡單的,很容易就可以破解,于是產生了密碼機: // 密碼機可以用復雜得多得密碼來快速、精確地對報文進行編碼.它們可…

elasticsearch5.x:查詢建議介紹、Suggester 介紹以及Java-api實現

elasticsearch5.x&#xff1a;查詢建議介紹、Suggester 介紹 參考&#xff1a;http://www.cnblogs.com/leeSmall/p/9206646.html 參考(重點)&#xff1a;https://elasticsearch.cn/article/142 參考&#xff08;官網&#xff09;&#xff1a;https://www.elastic.co/guide/en/e…

DOM-2 document對象、獲取元素、節點、遍歷樹

一、document獲取元素 1. 方法 document.getElementById(‘box’) // 在IE8及以下是不分大小寫的&#xff0c;而且name值也能匹配上document.getElementsByClassName(’’) // IE8及以下是用不了的document.getElementsByTagName() 都兼容document.getElementsByName() 用的非…

javascript --- js中的事件

事件實現松耦合: // JS和HTML之間的交互是通過事件實現的. // 事件,就是文檔或瀏覽器窗口中發生一些特定的交互瞬間. // 可以使用偵聽器來預定事件,以便事件發生時執行相應的代碼. // 這種在傳統軟件工程中被稱為觀察員模式的模型,支持頁面的行為與頁面的外觀之間的松耦合事件…

centos系統設置局域網靜態IP

---恢復內容開始--- centos系統設置局域網靜態IP 很多時候&#xff0c;我們并不希望漏油器重啟之后&#xff0c;自己的服務器動態的獲取IP&#xff0c;這樣很不利&#xff0c;因為你可能裝了mysql&#xff0c;redis&#xff0c;等軟件&#xff0c;然后需要遠程去訪問這臺服務器…

SQLServer數據庫(二)

數據庫設計&#xff1a;就是將數據庫中的數據庫實體及這些數據庫實體之間的關系&#xff0c;進行規劃和結構化的過程。 項目開發過程&#xff1a; 需求分析 概要設計 詳細設計 代碼編寫 運行測試 打包發行 數據庫的系統分析基本步驟&#xff1a;收集信息、標識實體、標識每個實…

DOM-3 【utils/待講評】節點屬性、方法、封裝方法、DOM結構

講評 節點屬性 nodeType 元素節點 1 大寫 屬性節點 2 文本節點 3 #text 注釋節點 8 #comment document 9 DocumentFragment 11 nodeName是只讀屬性元素節點的nodeName是大寫的其余的是#小寫的元素節點沒有nodeValue屬性&#xff0c;null&#xff0c;是可寫的其余有&#xff08…

javascript --- DOM0級、DOM2級、跨瀏覽器 的事件處理程序

DOM0級事件處理程序: // 使用DOM0級方法指定的事件處理程序被認為是元素的方法 // 這個時候的事件處理程序是在元素的作用域中運行: <div id "myBtn" >DOM0</div> <script>var btn document.getElementById("myBtn");btn.onclick fun…

collections deque隊列及其他隊列

from collections import dequedq deque(range(10),maxlen10) dq.rotate(3)#隊列旋轉操作接受一個參數N&#xff0c;讓N>0時&#xff0c;隊列的最右邊N個元素會被移動到隊列最左邊&#xff0c;反之會移到隊列最右邊 dq.appendleft(-1)#頭部添加dq.extend([11,22,33])#尾部添…

002 模板實參推斷、重載與模板

模板實參推斷 一、模板函數顯示實參 情況1&#xff1a; template <typename T1, typename T2, typename T3> T1 sum(T2 a, T3 b) {return a b; } 分析&#xff1a;調用的時候就需要指定T1的類型&#xff0c;如&#xff1a;sum<float>(1, 2); 于是sum函數的返回類型…

DOM-4 【utils/待講評】節點創建刪除、元素屬性設置獲取、節點屬性

講評 節點創建 Document.prototype ← document.createElement(div)document.createTextNode(xxx) // 創建文本節點document.createComment(xxx) // 創建注釋節點 增加/剪切子節點 Node.prototype ← node.appendChild(node)總是在父元素的最后增加&#xff08;類似push&am…

javascript --- 事件對象和事件類型

// 無論程序使用"DOM0級"規范還是"DOM2級"規范,都會在局部產生一個event對象, // 將其打印出來研究: <div id"divBtn"><button id"rawBtn" >Click Me!</button></div> <script>const divBtn document…

關于APP更新,兩包共存的解決方案

大多數是由于包名不一致導致的&#xff0c;一定要注意包名一致、不然手機會認為是兩個app&#xff0c;導致兩個包共存 查看包名的方法 1、hbuilder打包時會有提示 2、手機打開設置->應用->正在運行->對應app即可查看 轉載于:https://www.cnblogs.com/zz-0128/p/827969…

DOM-5【兼容】滾動距離與高度、兼容模式、可視尺寸

查看滾動條的距離 方法版本window.pageXOffset / pageYOffsetIE9/IE8及以下不支持(常規)document.body.scrollLeft/scrollTopIE9/IE8及以下(部分支持&#xff0c;具體看模式)document.documentElement.scrollLeft/scrollTopIE9/IE8及以下(部分支持&#xff0c;具體看模式)wind…

python中with及closing

推薦使用 "with"語句 以管理文件:with open("hello.txt") as hello_file: for line in hello_file: print line對于不支持使用"with"語句的類似文件的對象,使用 contextlib.closing():import contextlibwith contextlib.closing(urlli…

http --- Web頁面請求的歷程(如何根據URL尋找到需要的資源)

HTTP概況: // 超文本傳輸協議(HyperText Transfer Protocol,HTTP):是Web的應用層協議,它是Web的核心. // 客戶端和服務器運行在不同的端系統中,通過交換HTTP報文進行會話 // HTTP定義了這些報文的結構以及客戶和服務器進行報文交換的方式 // HTTP定義了Web客戶向Web服務器請求…

DOM-6 【兼容】讀寫樣式屬性、操作偽元素、運動元素初探

規范 <style type"text/css"></style><script type"text/javascript"></script>讀寫樣式屬性 .style是訪問不到css樣式表的&#xff0c;只能訪問到行內/內聯的屬性&#xff0c;當未設置行內屬性時&#xff0c;結果為空字符串 設…

RGBD論文閱讀筆記

Single-Image Depth Perception in the Wild 簡要記載一下對于利用RGB圖像depth圖像得到segmentation的論文。 論文名稱&#xff1a;Cascaded Feature Network for Semantic Segmentation of RGB-D Images 論文出處 ICCV 2017 Lin 模型結構 數據集 NYUDv2 SUN-RGBD 性能分析 總…