我有一个名为 "impact "的列,它的数据是嵌套的json格式。
输入。 [{"internalid":"079","impactid":[{"position":"1","typeid":"NOEUD","value":"G1"},{"position":"2","typeid":"ID","value": "001"},{"position":"3","typeid":"CODE_CI","value":"14"}],"typeid":"BTS","cdrs":"X110","belong":"OF","impactclass": "R", "count": "0", "numberaccessimpacted": "0", "impactcalculationrequest":null},{"internid": "6381075", "impactid": [{"position":"1","typeid":"NOEUD","value":"G3"},{"position":"2","typeid":"ID","value":"003"},{"position":"3","typeid": "CI","value":"58"}],"typeid":"BTS","cdrs":"X110","belong":"OF","impactclass":"R","count":"0","numberaccessimpacted": "0","impactcalculationrequest":null},{"internalid":"6381071","impactid":[{"position":"1","typeid":"NOEUD","value": "G2"},{"position":"2","typeid":"IDT","value":"002"},{"position":"3","typeid":"CI","value":"57"}],"typeid":"BTS","cdrs": "X110", "所属": "OF", "影响类别": "R", "计数": "0", "受影响次数": "0", "影响计算请求":null}]
。
我使用下面的代码。
SELECT
get_json_object(single_json_table.identifiant, '$.position') AS impact_position,
get_json_object(single_json_table.identifiant, '$.value') AS impact_value
FROM
(SELECT exp2.identifiant
FROM socle s
lateral view explode(split(regexp_replace(substr(impact, 2, length(impact)-2),
'},\\{"', '},,,,{"'), ',,,,')) exp2 as identifiant
)single_json_table
这里是结果,它跳过了第一个位置和值,我怎么能修复它呢
impact_position | impact_value
(null) (null)
2 001
3 14
(null) (null)
2 003
3 58
(null) (null)
2 002
3 57
1条答案
按热度按时间i5desfxk1#
上层数组是整个输入,包含 struct<internalid : string, impactid : array < struct <> > >,
impactid
是一个嵌套数组,包含的结构元素如下。{"position":"1","typeid":"NOEUD","value":"G1"}
你需要炸开两个数组。首先炸开上层数组:改变定界符,分割,炸开,然后对嵌套数组做同样的操作。
demo:
结果