作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个 json 列,其中包含从 d1 到 d32 的键,这些键具有特定的值。我现在想查询任何键中都不存在值的行。
Like - 任何不等于 abc 的维度。所以我正在检查 d1!=abc 或 d2!=abc..... d32!=abc。有更好的方法吗?
每一行都是一个json字段,包含d1-d32维度及其对应值的任意组合
最佳答案
使用 flatten()
,您可以获得 json 中每个键的名称和值:
with variants as (
select 1 id, parse_json('{"d1":1, "d2":2, "d3":3}') data
union all select 2, parse_json('{"d1":4, "d2":5, "d3":7}')
union all select 3, parse_json('{"d1":2, "d2":0, "d3":0}')
)
select *
from variants, table(flatten(data));
;
根据该信息,您可以查看所有名为 d%
的键并查找其中不存在的值 - 比方说 2:
with variants as (
select 1 id, parse_json('{"d1":1, "d2":2, "d3":3}') data
union all select 2, parse_json('{"d1":4, "d2":5, "d3":7}')
union all select 3, parse_json('{"d1":2, "d2":0, "d3":0}')
)
select id, not boolor_agg((iff(key like 'd%', value=2, true))) doesnt_have_a_2
from variants, table(flatten(data))
group by id
;
这表明 id=2
的行是唯一没有键值 2
的行。
作为替代方案,您还可以在 where
子句中过滤键名而不是 iff
:
with variants as (
select 1 id, parse_json('{"d1":1, "d2":2, "d3":3}') data
union all select 2, parse_json('{"d1":4, "d2":5, "d3":7}')
union all select 3, parse_json('{"d1":2, "d2":0, "d3":0}')
)
select id, boolor_agg(value=2)
from variants, table(flatten(data))
where key like 'd%'
group by id
;
关于json - Snowflake-如何在不使用硬编码键的情况下搜索 json 值中的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65653451/
我是一名优秀的程序员,十分优秀!