如何在雪花数据库中从Varchar“ JSON数组”中选择元素?

问题描述 投票:1回答:1

我在雪花数据库表中具有VARCHAR(16777216)列,该列结构为其中包含JSON的数组。

列中的行示例:[ {"Name":"John", "Last Name": "Doe"}, {"Name":"Frank", "Last Name": "Doe"}]

如何使用sql选择每一行中的所有姓氏?

请注意,这是一个VARCHAR列。

sql arrays get varchar snowflake-data-warehouse
1个回答
2
投票

您可以展平JSON数组,然后像这样提取Last Name字段:

WITH SampleData AS (
  SELECT '[ {"Name":"John", "Last Name": "Doe"}, {"Name":"Frank", "Last Name": "Doe"}]' AS text
)
SELECT json_object.value:"Last Name" AS last_name
FROM SampleData, LATERAL FLATTEN (input => PARSE_JSON(text)) json_object;

此返回:

LAST_NAME
"Doe"
"Doe"

在查询中,LATERAL FLATTEN部分表示在将文本解析为JSON之后为文本中的每个条目返回一行,然后在SELECT列表中,json_object.value返回该行的值,并且:"Last Name"从中返回名为Last Name的字段。 WITH SampleData (...)部分仅使用名为VARCHARtext列创建一些内联数据。

如果每个输入行只需要一行,其中姓氏在数组中,则可以使用这种形式的查询:

WITH SampleData AS (
  SELECT '[ {"Name":"John", "Last Name": "Doe"}, {"Name":"Frank", "Last Name": "Doe"}]' AS text
)
SELECT ARRAY_AGG(json_object.value:"Last Name") AS last_names
FROM SampleData, LATERAL FLATTEN (input => PARSE_JSON(text)) json_object
GROUP BY text;

此返回:

LAST_NAMES
[    "Doe",    "Doe"  ]
© www.soinside.com 2019 - 2024. All rights reserved.