如何从雪花数据库中的 Varchar "JSON Array" select 元素?
How to select element from Varchar "JSON Array" in snowflake database?
我在雪花数据库 table 中有一个 VARCHAR(16777216) 列,它的结构是一个包含 JSON 的数组。
列中一行的示例:[ {"Name":"John", "Last Name": "Doe"}, {"Name":"Frank", "Last Name": "Doe"}]
如何使用 sql 来 select 每行中的所有姓氏?
请注意,这是一个 VARCHAR 列。
您可以展平 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;
这个returns:
LAST_NAME
"Doe"
"Doe"
在查询中,LATERAL FLATTEN
部分表示将文本中的每个条目解析为 JSON 后 return 一行,然后在 [=16] =] 列表,json_object.value
return 是该行的值,:"Last Name"
return 是其中名为 Last Name
的字段。 WITH SampleData (...)
部分只是用一个名为 text
.
的 VARCHAR
列创建了一些内联数据
如果您希望每个输入行对应一行,其中姓氏在一个数组中,您可以使用以下形式的查询:
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;
这个returns:
LAST_NAMES
[ "Doe", "Doe" ]
我在雪花数据库 table 中有一个 VARCHAR(16777216) 列,它的结构是一个包含 JSON 的数组。
列中一行的示例:[ {"Name":"John", "Last Name": "Doe"}, {"Name":"Frank", "Last Name": "Doe"}]
如何使用 sql 来 select 每行中的所有姓氏?
请注意,这是一个 VARCHAR 列。
您可以展平 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;
这个returns:
LAST_NAME
"Doe"
"Doe"
在查询中,LATERAL FLATTEN
部分表示将文本中的每个条目解析为 JSON 后 return 一行,然后在 [=16] =] 列表,json_object.value
return 是该行的值,:"Last Name"
return 是其中名为 Last Name
的字段。 WITH SampleData (...)
部分只是用一个名为 text
.
VARCHAR
列创建了一些内联数据
如果您希望每个输入行对应一行,其中姓氏在一个数组中,您可以使用以下形式的查询:
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;
这个returns:
LAST_NAMES
[ "Doe", "Doe" ]