KSQl如何将字符串类型JSON转为数组并使用EXPLODE展开?
解决方案:KSQL解析JSON字符串并展开categories数组
核心思路
由于FULLDOCUMENT是存储为VARCHAR的JSON字符串,需要先将其解析为JSON结构,再提取目标数组,最后用EXPLODE展开并提取具体的$oid值。
分步实现
解析字符串为JSON对象
使用JSON_PARSE函数将字符串类型的FULLDOCUMENT转换为可操作的JSON对象:JSON_PARSE(FULLDOCUMENT)提取categories数组
通过JSON_EXTRACT_ARRAY从解析后的JSON中取出categories数组:JSON_EXTRACT_ARRAY(JSON_PARSE(FULLDOCUMENT), '$.categories')展开数组并提取$oid值
用EXPLODE将数组拆分为单行,再通过JSON_EXTRACT_SCALAR(或箭头语法)提取每个元素中的$oid值。
完整查询语句
写法一:使用JSON函数
SELECT JSON_EXTRACT_SCALAR(category, '$.["$oid"]') AS CATEGORIES FROM your_topic_name CROSS JOIN EXPLODE(JSON_EXTRACT_ARRAY(JSON_PARSE(FULLDOCUMENT), '$.categories')) AS t(category);
写法二:使用箭头简化语法(KSQL 5.3+支持)
SELECT category->'$oid' AS CATEGORIES FROM your_topic_name CROSS JOIN EXPLODE(JSON_PARSE(FULLDOCUMENT)->'$.categories') AS t(category);
关键说明
- 由于
$oid是带特殊符号$的键,访问时需要用["$oid"]或->'$oid'的方式,避免语法冲突。 CROSS JOIN EXPLODE是KSQL中展开数组的标准方式,会将数组的每个元素转换为单独的行。
内容的提问来源于stack exchange,提问作者knl
相关产品推荐
相关产品推荐

