从 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 数组(tipvs)。行不能轻易转换为所需的 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