马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
x
MAP又被称为字典,格式如{key1:value1,key2:value2,…}形式,一般以k:v成对出现。
1、map构造
- map('7',coalesce(trade_info.7d_order,0),
- '14',coalesce(trade_info.14d_totalt,0),
- '28',coalesce(trade_info.28d_total,0),
- ) AS last_nday_total,
- -- 建表时的字段类型
- `last_nday_total` map<string,bigint> COMMENT '近N天单量(N可取7,14,28)' ,
复制代码 输出实例
- {
- "14": 7,
- "28": 11,
- "7": 3
- }
复制代码 2、获取map 获取map字段的全部key值,或者全部value值
map_keys(map字段) -- 返回map字段里全部的key值,输出为数组
--> 输出示例:["14","28","180","365","7","90","60","30"]
map_values(map字段) -- 返回map字段里左右的value值,输出为数组
--> 输出示例:[7,11,34,116,3,20,18,11]
3、获取map字段中其中一个value值
last_nday_total['28'] --> map字段['对应的key']
--> 输出 11
4、将字符串转换为map格式
str_to_map(字符串字段str) -- 注意:字符串转换为map格式时,默认以英文逗号为分隔,key与value成对出现
-- 示例
str_to_map('"SH":1000,"SZ":980')
--> {"SH":1000,"SZ":980}
str_to_map(regexp_replace(concat_ws(',',collect_set(if(decisionids <> '',concat(cast(sceneid as string),':',regexp_replace(decisionids,'\\,','\\;')),null))),'\\"|\\{|\\}','')) -- 行归并,并且生成一个map字段
5、将json转换为map格式
str_to_map('{"SH":1000,"SZ":980}')
--> {"SH":1000,"SZ":980}
6、求map字段的长度或元素个数
size(map字段)
7、将map字段中空值或无效值过滤掉
map_filter(map字段, (k, v) -> v IS NOT NULL) -- 将map字段中的value值为NULL的过滤掉
map_filter(map字段, (k, v) -> v <> '') -- 将map字段中的value值为空字符串的过滤掉,以此类推
map_filter(map字段, (k, v) -> k <> '') -- 将map字段中的key值为空字符串的过滤掉,以此类推
8、在map字段中新插入元素
-- 已知已有一个map字段score {"Chinese":"98"},请在里面再插入一个新元素,key为"Math",value为"99"
-- 方式1:
先将原有map字段拆开,再添加新元素。对原map字段元素多不好操纵,且后续有变化难维护
map('Chinese','98',
'Math','99'
)
-- 方式2:
待增补
9、已知两个数组array分别是map的key值与value值,其中k/v数组元素次序保持映射不变,将其还原为map格式字段
-- 已知map key数组与map value数组分别为:
map key数组:['Chinese','Math']
map value数组:['98','99']
-- 将其归并为一个map字段,输出为 {"Chinese":"98","Math":"99"}
-- 方式1:
将数组全部拆开为单位素,进行k/v瓜代映射,输出map字段。对于多元素难操纵
map(key[0],value[0],
key[1],value[1]
10、将多个map字段归并,例如在多行归并时存在map字段
-- 方式1:
先将map字段转换为json,。使用udf:to_json将map转换为json字符串,再使用行归并函数collect_set(),最终再将string转换为map
ADD jar hive-udf-tojson.jar;
CREATE TEMPORARY FUNCTION to_json as 'com.meituan.hive.udf.generic.GenericUDFToJson';
select str_to_map(regexp_replace(concat_ws(',',collect_set(to_json(factor_context))),'\\{|\\}|\\"','')) as factor_context;
-- 方式2:
待增补,可参考https://www.saoniuhuo.com/question/detail-2046136.html
参考:
hive:将两个Map归并到一列中_大数据知识库
https://www.zhihu.com/question/384904689/answer/1126084222
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |