首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Presto filter json数组

Presto filter json数组
EN

Stack Overflow用户
提问于 2021-04-29 00:33:10
回答 2查看 274关注 0票数 0

如何在Presto中过滤json数组?

代码语言:javascript
运行
复制
WITH dataset AS (
  SELECT * FROM (VALUES
    (JSON '{"turnovers": [{"purpose": "Bla Bla", "amount": 3, "tag": "E"}, 
                          {"purpose": "Blub", "amount": 3, "tag": "F"}]}'),
    (JSON '{"turnovers": [{"purpose": "Palim", "amount": 3, "tag": "E"}, 
                          {"purpose": "Palim Palim", "amount": 3, "tag": "E"}]}')
  ) AS t (snapshot)
)
SELECT 
    json_extract(snapshot, '$.turnovers')
FROM 
    dataset

我希望只获得成交额与标签E,而不是所有的交易。在此示例中,应排除具有标记F的一个事务。

这有可能吗?

我本希望使用这样的东西,但这不起作用

代码语言:javascript
运行
复制
WITH dataset AS (
  SELECT * FROM (VALUES
    (JSON '{"turnovers": [{"purpose": "Bla Bla", "amount": 3, "tag": "E"}, 
                          {"purpose": "Blub", "amount": 3, "tag": "F"}]}'),
    (JSON '{"turnovers": [{"purpose": "Palim", "amount": 3, "tag": "E"}, 
                          {"purpose": "Palim Palim", "amount": 3, "tag": "E"}]}')
  ) AS t (snapshot)
)
SELECT 
    filter(json_extract(snapshot, '$.turnovers'), x -> json_extract_scalar(x, '$.tag')='E')
FROM 
    dataset
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-04-29 03:18:20

您可以尝试在expression json_extract(snapshot, '$.turnovers[?(@.tag == "E")]')中使用json path,但如果它失败了,就像对我一样-将数据转换为行数组并过滤这些数组:

代码语言:javascript
运行
复制
WITH dataset AS (
  SELECT * FROM (VALUES
    (JSON '{"turnovers": [{"purpose": "Bla Bla", "amount": 3, "tag": "E"},
                          {"purpose": "Blub", "amount": 3, "tag": "F"}]}'),
    (JSON '{"turnovers": [{"purpose": "Palim", "amount": 3, "tag": "E"},
                          {"purpose": "Palim Palim", "amount": 3, "tag": "E"}]}')
  ) AS t (snapshot)
)
SELECT
    filter(CAST(json_extract(snapshot, '$.turnovers') as ARRAY(ROW(purpose VARCHAR, amount INTEGER, tag VARCHAR))), x -> x.tag = 'E')
FROM
    dataset

如果在过滤后需要,您可以选择转换回json。

票数 1
EN

Stack Overflow用户

发布于 2021-04-29 20:35:06

这对我很有效。ARRAY(MAP(VARCHAR, JSON))非常灵活,并且还允许在json数组中嵌套json。

代码语言:javascript
运行
复制
WITH dataset AS (
  SELECT * FROM (VALUES
    (JSON '{"turnovers": [{"purpose": "Bla Bla", "amount": 3, "tag": "E"},
                          {"purpose": "Blub", "amount": 3, "tag": "F"}]}'),
    (JSON '{"turnovers": [{"purpose": "Palim", "amount": 3, "tag": "E"},
                          {"purpose": "Palim Palim", "amount": 3, "tag": "E"}]}')
  ) AS t (snapshot)
)
SELECT
    CAST(filter(CAST(json_extract(snapshot, '$.turnovers') AS ARRAY(MAP(VARCHAR, JSON))), x -> json_format(x['tag']) = '"E"') AS JSON)
FROM
    dataset
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67304280

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档