regexp_extract获取所有匹配项

时间:2018-03-13 23:17:58

标签: regex hive extract

我正在查询MULTILINE中的列。 此列包含hive有效内容,格式为:

json

我试图提取出现在有效负载不同点的所有状态值。 我使用以下内容:

{"aaa":"xxx", "status":"yes", "bbb":"xyx", "ccc":"yxy", "status":"no", "status":"maybe", "ddd":"zyz"}

然而,这仅返回第一次出现的状态,并且缺少所有下一个状态。每次重复状态后如何获取值?

由于

2 个答案:

答案 0 :(得分:0)

我猜你这样做是因为json格式错误,包含了错误的密钥。

正则表达式使用任何东西 - 但[^abc]表示法:

/"status":"([^"]*)"/g

如果您只想使用包含值的条目,那么它还将从" status":""收集空字符串:

/"status":"([^"]+)"/g

原始且最佳的正则表达式引用当然是perldoc perlrehttps://perldoc.perl.org/perlre.html

答案 1 :(得分:0)

使用REGEXP_REPLACESPLIT,EXPLODEget_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