从 Presto 中的行数组中提取
Extract from Array of Rows in Presto
我有一个 table,里面有一个字典列表。在示例中,列表中只有一本字典。
items
[{'a': 'apple', b: 'banana'}]
我想为 'a' 选择值,它是苹果。
我试过:
SELECT json_extract_scalar(json_parse(items), '$.a')
给出错误:
Unexpected parameters (array(row("t" varchar,"i" varchar,"p" integer,"v" integer,"s" varchar))) for function json_parse. Expected: json_parse(varchar(x))
我也试过:
SELECT TRANSFORM(CAST(JSON_PARSE(items) AS ARRAY<JSON>), x -> JSON_EXTRACT_SCALAR(x, '$.a'))
这给出了同样的错误。如果我首先执行 CAST(items AS varchar)
,则会出现一个错误,指出它无法将数组转换为 varchar。
提供的错误表明您的数据实际上不是 varchar 或 json,而是具有 5 个字段的 ROW
数组(t
、i
、p
、v
、s
)。行不能轻易转换为所需的 json 结构,但您可以通过名称轻松访问它的字段:
select item.t
from (
SELECT array [ cast (row('apple', 'banana') as row(t varchar, i varchar)) ] items -- shortened sample data
)
cross join unnest(items) as c(item) -- flatten the array
输出:
t
apple
我有一个 table,里面有一个字典列表。在示例中,列表中只有一本字典。
items |
---|
[{'a': 'apple', b: 'banana'}] |
我想为 'a' 选择值,它是苹果。
我试过:
SELECT json_extract_scalar(json_parse(items), '$.a')
给出错误:
Unexpected parameters (array(row("t" varchar,"i" varchar,"p" integer,"v" integer,"s" varchar))) for function json_parse. Expected: json_parse(varchar(x))
我也试过:
SELECT TRANSFORM(CAST(JSON_PARSE(items) AS ARRAY<JSON>), x -> JSON_EXTRACT_SCALAR(x, '$.a'))
这给出了同样的错误。如果我首先执行 CAST(items AS varchar)
,则会出现一个错误,指出它无法将数组转换为 varchar。
提供的错误表明您的数据实际上不是 varchar 或 json,而是具有 5 个字段的 ROW
数组(t
、i
、p
、v
、s
)。行不能轻易转换为所需的 json 结构,但您可以通过名称轻松访问它的字段:
select item.t
from (
SELECT array [ cast (row('apple', 'banana') as row(t varchar, i varchar)) ] items -- shortened sample data
)
cross join unnest(items) as c(item) -- flatten the array
输出:
t |
---|
apple |