问各位大佬一个sql问题

SELECT
    sr.entity_id,
    sr.strategy_id,
    sr.check_detail
FROM
    origindb_ss.meishi_qc_scp_copilot__strategy_result sr
WHERE
    sr.dt = REPLACE('$$enddate', '-', '')
    AND sr.entity_id = 1938826114;

上面这个SQL查询的结果是:

check_detail:[{"ruleId":10554,"taskId":10001,"checkResult":true,"resultJson":{"diagThreshold":"5","currentValue":"6"}},{"ruleId":10555,"taskId":10002,"checkResult":true,"resultJson":{"diagThreshold":"1","currentValue":"1"}},{"ruleId":10556,"taskId":10003,"checkResult":true,"resultJson":{"diagThreshold":"2","currentValue":"2"}},{"ruleId":10557,"taskId":10004,"checkResult":true,"resultJson":{"diagThreshold":"1","currentValue":"1"}},{"ruleId":10558,"taskId":10005,"checkResult":true,"resultJson":{"diagThreshold":"1","currentValue":"3"}}]

可以看到check_detail这个json数据有很多ruleId,我想获得这样的数据
±-----------±------------±-------+
| entity_id | strategy_id | ruleId |
±-----------±------------±-------+
| 1938826114 | 1001 | 10554 |
| 1938826114 | 1001 | 10555 |
| 1938826114 | 1001 | 10556 |
| 1938826114 | 1001 | 10557 |
| 1938826114 | 1001 | 10558 |
±-----------±------------±-------+
哪位大佬能棒棒小弟~
gpt给我的答案是这样的,我试过了不行

在此处键入或粘贴代码
2 个赞

GPT的答案,试过了不行。。发帖怎么一直403呀,不让我贴代码

1 个赞

交给楼下大佬

2 个赞

没看懂,你贴的不是sql执行结果啊

2 个赞

哪个数据库?mysql?查一下他的json解析语法

1 个赞

现在这个编辑有点问题,我一贴代码他就报403
结果是:entity_id:1938826114,strategy_id:1001当前这两个不重要,主要是check_detail已经贴出来了,这个里面存的是一个集合,每个函数是一个ruleId的数据,我想一条sql把数据查出来,类似下面的这个:
±-----------±------------±-------+
| entity_id | strategy_id | ruleId |
±-----------±------------±-------+
| 1938826114 | 1001 | 10554 |
| 1938826114 | 1001 | 10555 |
| 1938826114 | 1001 | 10556 |
| 1938826114 | 1001 | 10557 |
| 1938826114 | 1001 | 10558 |
±-----------±------------±-------+
我表达清楚了吗~

我去试一下

1 个赞

hive有解析json的方法啊。我记得是有 好久没用过了

2 个赞

表结构发出来看看

2 个赞

找到
get_json_object(string json_string, string path)

说明:
第一个参数填写json对象变量,第二个参数使用$表示json变量标识,然后用 . 或 读取对象或数组;如果输入的json字符串无效,那么返回NULL。
每次只能返回一个数据项

2 个赞

一转多吗,可以看下 hiveexplode + lateral view 的语法

1 个赞

擦 是我没看清楚 先解json 获取到数组 ,然后再用爆炸函数给他炸开

2 个赞



这个是刚才的那个结果

1 个赞

check_detail数据是这样的:


GPT的答案,我试了不行

因为你的不是个json? 你看这样行不行。笨方法。先替换掉那个开头……冒号。这样就是一个类似逗号分隔的字符串了。你这时候的分隔符可能是}},这样。然后再分隔航专列。然后再看json处理你最里层的那个字典

2 个赞

调调这个。先不炸开。看替换的是什么样 ,确保替换完是个json

1 个赞

split肯定不行。把后面的调成json后用json函数返回一个数组在explod

1 个赞

hive不咋会玩,我问问GPT试试你这个方法

1 个赞

https://blog.51cto.com/u_16175474/7823171 试试这个呢

1 个赞