我正在查询MULTILINE
中的列。
此列包含hive
有效内容,格式为:
json
我试图提取出现在有效负载不同点的所有状态值。 我使用以下内容:
{"aaa":"xxx", "status":"yes", "bbb":"xyx", "ccc":"yxy", "status":"no", "status":"maybe", "ddd":"zyz"}
然而,这仅返回第一次出现的状态,并且缺少所有下一个状态。每次重复状态后如何获取值?
由于
答案 0 :(得分:0)
我猜你这样做是因为json格式错误,包含了错误的密钥。
正则表达式使用任何东西 - 但[^abc]
表示法:
/"status":"([^"]*)"/g
如果您只想使用包含值的条目,那么它还将从" status":""收集空字符串:
/"status":"([^"]+)"/g
原始且最佳的正则表达式引用当然是perldoc perlre
:
https://perldoc.perl.org/perlre.html
答案 1 :(得分:0)
使用REGEXP_REPLACE
,SPLIT,EXPLODE
和get_json_object()
SELECT *
FROM (
SELECT get_json_object(r, '$.status') AS STATUS
FROM yourtable t
LATERAL VIEW explode(split(regexp_replace(t.payload, ',', '},{'), ',')) t1 AS r
) a
WHERE STATUS IS NOT NULL;
这给出了
status
yes
no
maybe