文字压平 NULL 对象或数组

Jos*_*nas 2 snowflake-cloud-data-platform

我正在尝试展平表的一列中包含的 JSON 对象,该列有一个可选字段。

-- row 1
{
    "key1": "value1",
    "key2": {
        "key3": [1, 2, 3]
    }
    
}
-- row 2
{
    "key1": "value1x"
}
Run Code Online (Sandbox Code Playgroud)

从上面的示例中,我们假设该表来自表“X”和列“A”我要选择的查询:

SELECT
   x.id, -- another column in table X
   key3
FROM X AS x,
LATERAL FLATTEN(A.key2.key3) AS key3
Run Code Online (Sandbox Code Playgroud)

结果表:

id  |  key3
___________
 1  |   1
 1  |   2
 1  |   3
Run Code Online (Sandbox Code Playgroud)

我想要实现的目标:

id  |  key3
___________
 1  |   1
 1  |   2
 1  |   3
 2  |   NULL
Run Code Online (Sandbox Code Playgroud)

有什么想法如何做到这一点?一个想法是UNION对于所有的NULL对象有没有更好的方法?

Luk*_*zda 6

要获取不存在的值,可以应用OUTER选项:

如果为 TRUE,则为零行扩展生成一行(KEY、INDEX 和 VALUE 列中为 NULL)。

SELECT
   x.id, -- another column in table X
   key3
FROM X AS x,
LATERAL FLATTEN(INPUTY => A.key2.key3,OUTER => TRUE) AS key3
Run Code Online (Sandbox Code Playgroud)