Hive 从一个长的 concat json 字符串中解析 json 元素

Posted

技术标签:

【中文标题】Hive 从一个长的 concat json 字符串中解析 json 元素【英文标题】:Hive parse json elements from a long concat json string 【发布时间】:2020-06-17 11:46:22 【问题描述】:

我有一个服务器日志,它连续记录json值,没有任何分隔符,例如:

"a":1"b",2"a":2"c":\"qwe\":\"asd\","d":"ert""e":12....

我想提取每个元素并将它们放入如下行中:

"a":1
"b",2
"a":2
"c":\"qwe\":\"asd\","d":"ert"
"e":12..

日志缺少分隔符并且包含嵌套的json,所以我不能使用 split函数...如何实现这个...

【问题讨论】:

此字段存储为什么数据类型?这是字符串还是结构体? 嗨~ @EdwardMendez 这是一个字符串字段 【参考方案1】:

一种选择是在 字符上使用split 并使用posexplode 获取元素。仅需要正确连接第一个和最后一个元素的位置。

select case when pos = 0 then concat(split_str,'') 
            when pos = max(pos) over(partition by str) then concat('',split_str) 
       else concat('',split_str,'') end as res
from tbl 
lateral view posexplode(split(str,'\\\\')) t as pos,split_str

请注意,结果将是 string

【讨论】:

以上是关于Hive 从一个长的 concat json 字符串中解析 json 元素的主要内容,如果未能解决你的问题,请参考以下文章

从 JSON 中提取很长的字符串到 CLOB

hive - concat 函数

Hive 从 json 行中选择一个特定的字符串

将 Hive 查询转换为雪花

如何从 json 数组中获取 hive 中的字符串列表

hive concat ws 怎么处理null值的