[英]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.