[英]Is there a way to search for an element inside a JSON array using sql in snowflake?
我在表中有一列,其中每一行都包含一个 JSONarray。 我需要为每一行从中提取某些相同的元素,但是,因为它是一个数组,所以数组中元素的顺序并不总是相同的,我不能用它们的名字来调用这些元素。有没有我有什么方法可以做一个 for 循环或类似的事情来遍历数组的每个索引,当它不返回 null 时它会中断?
Lukasz 出色答案的扩展:
使用带有几行“id, json”的 CTE,我们可以看到 FLATTEN 如何将其分开:
WITH fake_data(id, json) as (
SELECT column1, parse_json(column2) FROM VALUES
(1, '[1,2,3]'),
(2, '{"4":4, "5":5}')
)
SELECT t.*
,f.*
FROM fake_data AS t
,LATERAL FLATTEN(INPUT => t.json) f
ID | JSON | 序列号 | 钥匙 | 小路 | 指数 | 价值 | 这个 |
---|---|---|---|---|---|---|---|
1个 | [ 1, 2, 3 ] | 1个 | [0] | 0 | 1个 | [ 1, 2, 3 ] | |
1个 | [ 1, 2, 3 ] | 1个 | [1] | 1个 | 2个 | [ 1, 2, 3 ] | |
1个 | [ 1, 2, 3 ] | 1个 | [2] | 2个 | 3个 | [ 1, 2, 3 ] | |
2个 | { “4”:4,“5”:5 } | 2个 | 4个 | ['4'] | 4个 | { “4”:4,“5”:5 } | |
2个 | { “4”:4,“5”:5 } | 2个 | 5个 | ['5'] | 5个 | { “4”:4,“5”:5 } |
Flatten 给出seq
、 key
、 path
、 index
、 value
和this
Seq:是输入的行,如果您将行分开并想将它们合并在一起,但又不想混淆不同的行,这将非常有用。
键:如果被展平的东西是 object,则为属性的名称,第二行就是这种情况。
路径:是访问该值的方式。 又名t.json[2]
会和你一起3
索引:如果是数组,就是进入object的步骤
值:是值
This:是循环的东西,对于获取下一个等东西很有用。
Lateral flatten 可以帮助提取 JSON object 的字段,是一个很好的替代方法,可以使用各自的名称逐个提取它们。 但是,有时 JSON object 可以嵌套,通常提取这些嵌套对象需要知道它们的名称。
这是一篇可能会帮助您动态提取多级字段的文章 JSON OBJECT 使用横向展平
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.