簡體   English   中英

從 Presto 中的行數組中提取

[英]Extract from Array of Rows in Presto

我有一個包含字典列表的表。 在示例中,列表中只有一本字典。

項目
[{'a': '蘋果', b: '香蕉'}]

我想選擇“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 個字段( tipvs )的ROW數組。 行不能輕易轉換為所需的 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

Output:

蘋果

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM