Hive中的map型別及其操作

2021-10-07 14:41:40 字數 2680 閱讀 5404

–建立表,並定義map型別

create

table employee(id string, perf map

)row format delimited

fields

terminated

by'\t'

collection items terminated

by','

--map形式key:value,key:value

map keys

terminated

by':'

;--map形式key:value,key:value

map中的方法:

size(map)函式:可得map的長度。返回值型別:int

map_keys(map)函式:可得map中所有的key; 返回值型別: array

map_values(map)函式:可得map中所有的value; 返回值型別: array

判斷map中是否包含某個key值:array_contains(map_keys(k_v),『a』)或者k_v[「a」] is not null

在k-v對中,若value有多個值的情況,如 ,如果要用 『k1』 中 '02』作為過濾條件,則語句如下:(這裡用到split來處理)select * from t where split(t.params['k1'],',')[1] ;如果過濾條件為:k2的值必須為』45』開頭,則語句如下:

(這裡用到substr方法來處理,這裡註明一下,1和2分別表示起始位置和長度)

select

*from t where substr(t.params[

'k2'],

1,2)

='45'

;

案例:

–字串轉map型別

–1.判斷key是否在map中存在

select mm.

*, array_contains(map_keys(k_v)

,'a'

)from

(select t.w,str_to_map(concat_ws(

'&',collect_set(concat(m,

":",mc)))

,"&"

,":"

) k_v --1.拼接字串為 key:value&key:value;2.將拼接的字串轉成map型別

from

(select

1 w,

'a' m,

"中" mc

union

allselect

1 w,

'b' m,

"國" mc

union

allselect

2 w,

'c' m,

"好" mc

) t group

by t.w

) mm

;

–2.判斷key是否在map中存在

select mm.

*from

(select t.w,str_to_map(concat_ws(

'&',collect_set(concat(m,

":",mc)))

,"&"

,":"

) k_v

from

(select

1 w,

'a' m,

"中" mc

union

allselect

1 w,

'b' m,

"國" mc

union

allselect

2 w,

'c' m,

"好" mc

) t group

by t.w

) mm where k_v[

"a"]

isnot

null

;

–3.map的單行轉多行

select mm.

*, y.n_m,y.n_mc from

(select t.w,str_to_map(concat_ws(

'&',collect_set(concat(m,

":",mc)))

,"&"

,":"

) k_v

from

(select

1 w,

'a' m,

"中" mc

union

allselect

1 w,

'b' m,

"國" mc

union

allselect

2 w,

'c' m,

"好" mc

) t group

by t.w

) mm

lateral view explode(mm.k_v) y as n_m,n_mc

;

結果:

Hive表型別及其操作

create database demo use demo create table table 1 id int,name varchar 8 create external table table 2 id int,name varchar 8 row format delimited fiel...

Python中的集合型別及其操作

集合是乙個無序的 字典也是無序的 不重複的資料集合。其基本功能包括下面兩種 1.去重 把乙個還有重複元素的列表或元組等資料型別轉變成集合,其中的重複元素只出現一次。使用set 方法。2.進行關係測試 測試兩組資料之間的交集,差集,並集等資料關係。首先是乙個使用set 去重的例子 可見a,b分別為含有...

redis中string型別及其操作

新增乙個name guo的鍵值對 set name guo get name guo setnx name guo new integer 0 get name guo 原來的name有乙個對應的值,所以本次的修改不生效,返回0 設定key對應的value並且指定此鍵值的有效期 setex colo...