簡體   English   中英

雪花 JSON FLATTEN with ORDER BY

[英]Snowflake JSON FLATTEN with ORDER BY

我有一個工作查詢,將嵌套的 JSON object 展平為數據行。 然而,我想做的是保留一個對象數組的原始順序,該對象數組嵌套在多個層中。

我嘗試將ROW_NUMBERORDER BY NULLORDER BY (SELECT NULL)一起使用,但似乎都沒有保留順序。

關於如何實現這一目標的任何想法? 下面的例子。 我選擇屏蔽真實數據,但結構的重要部分是相同的。 JSON 格式的數據沒有排名識別信息,但我在這里使用數字作為示例來顯示奇怪的結果。

原始結構(屏蔽):

{
    "topNode: {
        "childNode": {
            "list": [
                {
                    "title": "example title 1",
                },
                {
                    "title": "example title 2",
                },
                {
                    "title": "example title 3",
                },
                {
                    "title": "example title 4",
                },
                {
                    "title": "example title 5",
                }
            ]
        }
    }
}

示例查詢(屏蔽):

SELECT 
    A.VALUE:"title"::VARCHAR AS "TITLE",
    ROW_NUMBER() OVER(ORDER BY NULL) AS RANK
FROM 
    DB.SCHEMA.TABLE as A,
    lateral flatten(input=>A.JSON:topNode.childNode.list) "list_flatten"

示例 output:

TITLE                     RANK
"example title 3"         1
"example title 5"         2
"example title 2"         3
"example title 1"         4
"example title 4"         5

INDEX是可能的,它返回數組中元素的索引:

SELECT A.VALUE:"title"::VARCHAR AS "TITLE",
       "list_flatten".index AS "RANK"
FROM DB.SCHEMA.TABLE as A,
lateral flatten(input=>A.JSON:topNode.childNode.list) "list_flatten"

我有一個工作查詢將嵌套的 JSON object 展平為數據行。 但是,我想做的是保留嵌套了幾層的一組對象的原始順序。

我嘗試將ROW_NUMBERORDER BY NULLORDER BY (SELECT NULL)一起使用,但似乎都沒有保留訂單。

關於如何做到這一點的任何想法? 下面的例子。 我選擇屏蔽真實數據,但結構的重要部分是相同的。 JSON 格式的數據沒有排名識別信息,但我在這里使用數字作為示例來顯示奇怪的結果。

原始結構(屏蔽):

{
    "topNode: {
        "childNode": {
            "list": [
                {
                    "title": "example title 1",
                },
                {
                    "title": "example title 2",
                },
                {
                    "title": "example title 3",
                },
                {
                    "title": "example title 4",
                },
                {
                    "title": "example title 5",
                }
            ]
        }
    }
}

示例查詢(屏蔽):

SELECT 
    A.VALUE:"title"::VARCHAR AS "TITLE",
    ROW_NUMBER() OVER(ORDER BY NULL) AS RANK
FROM 
    DB.SCHEMA.TABLE as A,
    lateral flatten(input=>A.JSON:topNode.childNode.list) "list_flatten"

示例 output:

TITLE                     RANK
"example title 3"         1
"example title 5"         2
"example title 2"         3
"example title 1"         4
"example title 4"         5

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM