![](/img/trans.png)
[英]How to extract data from Mysql column stored in serialized JSON column?
[英]Extract JSON data from column using Presto
我正在使用 Presto,并且有一个带有复杂 JSON 数据的 column_A,其中每个单元格都有一个如下所示的数组:
[{"value":"aaa", "items":["246","123"],...}, {"value":"bbb", "items":["357","123"],...}]
我要做的是从每个单元格中仅提取“项目”具有代码“357”的 JSON 对象。
因此,理想情况下,查询的输出将是 Column_B 中具有一个JSON 对象(不是数组)的新数据,如下所示:
{"value":"bbb", "items":["357","123"],...}
注意:对于每个单元格,只有一个代码为“357”的对象,但是,“项目”的数组中可能有多个代码。 就像上面的例子一样。
到目前为止,我尝试了以下方法,但它似乎不起作用:
SELECT JSON_EXTRACT(column_a, '$.(SELECT * from column_a where column_a::text LIKE '%357%')') AS column_extracted
FROM column_a
有谁知道我可以尝试什么?
您可以为此使用 Trino(以前称为 Presto SQL)中新引入的JSON 路径函数:
WITH t(data) AS (
VALUES '[{"value":"aaa", "items":["246","123"]}, {"value":"bbb", "items":["357","123"]}]'
)
SELECT json_query(t.data, 'strict $[*]?(@.items[*] == "357")')
FROM t
产生:
_col0
---------------------------------------
{"value":"bbb","items":["357","123"]}
(1 row)
如果您查看$[*]?(@.items[*] == "357")
,它会说“查找与条件@.items[*] == "357"
匹配的顶级数组的所有元素@.items[*] == "357"
",它依次检查items
数组中的任何元素是否具有357
的值。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.