Hive 基本教程

Hive SQL

Hive 笔记

original icon
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.knowledgedict.com/tutorial/hive-sql-str_to_map-function.html

Hive SQL 字符串转 map 或 json 函数 STR_TO_MAP 详解

Hive SQL 内置函数全解 Hive SQL 内置函数全解


Hive SQL 中将字符串转成 MAP 格式(也可以当成 JSON)的函数是 STR_TO_MAP,它使用两个分隔符将文本拆分为键值对(KV),分隔符1和分隔符2默认分别为","和"=",也可以指定两个分隔符。

语法说明

语法

STR_TO_MAP(text[, delimiter1, delimiter2])

说明

STR_TO_MAP 函数使用两个分隔符将文本拆分为键值对。delimiter1 将文本分成 K-V 对,delimiter2 分割每个 K-V 对。对于 delimiter1,默认分隔符是",",对于 delimiter2 默认分隔符是"="。

如果需要指定分隔符,必须指定两个分隔符。

返回

STR_TO_MAP 函数返回的是 Map<String, String> 类型,不存在其它 MAP 类型,如 Map<String, Int> 此类。

常用例子

字符串解析成 json 格式

SELECT STR_TO_MAP('knowledge:18&dict:8','&',':')
;

先将指定字符串按照第一个分隔符"&"分隔,再将每个 item 再用":"分隔成键值对,最后输出如下 Map<String, String>

{"knowledge":"18","dict":"8"}

多个字段组合成 json 格式数据

假设 hive 有用户特征表 dwd_user_feature,表结构如下:

uid           bigint,
feature_name  string,
feature_value string

希望将 uid 做聚合,并将 feature_namefeature_value 作为键值对映射,示例如下:

SELECT  uid
        ,STR_TO_MAP(CONCAT_WS(',',COLLECT_SET(CONCAT(feature_name,':',feature_value))),',',':')
        ,COUNT(1) AS num
FROM    soyoung_recommend.dwd_user_feature
WHERE   dp = '2022-10-28'
GROUP BY uid
;

如上,利用了 CONCATCOLLECT_SETCONCAT_WS 函数,输出示例如下:

uid	_c1	num
11	"{"uid__post_detail_view_90":"12","uid__last_log_in_date":"2022-10-28","uid__pm2_cnt_90":"15","uid__product_detail_view_90":"30"}"	4
21	"{"uid__post_detail_view_90":"305","uid__last_log_in_date":"2022-08-23","uid__product_detail_view_90":"3"}"	3
41	"{"uid__last_log_in_date":"2022-10-28","uid__post_detail_view_90":"24","uid__product_detail_view_90":"41"}"	3
89	"{"uid__last_log_in_date":"2022-07-29"}"	1
Hive SQL JSON 字符串函数 GET_JSON_OBJECT 是用于解析 json 字符串,支持多层嵌套的 json 形式的解析, ...
下面我将介绍两种常见的实现方式,包括使用原生的Java类库和使用第三方库(如Jackson)。Maven依赖:Gradle依赖:示例代码:这 ...
在Java中将Map转换为JSON字符串有多种方式可以实现,下面我将介绍三种常用的方式,并提供示例代码以及相关依赖的Maven和Gradle ...
python 字符串 str 转 json 对象(本质上的 python 的 dict 对象)可以利用标准库中提供的 json 模块的 lo ...
在Java中,将JSON转换为Map有多种方式可以实现,下面我将介绍几种常见的方法,并提供相应的代码示例和依赖坐标。1添加依赖Maven依赖 ...