Извлечение из массива строк в Presto

У меня есть таблица со списком словарей. В примере в списке только один словарь.

Предметы
[{'a': 'яблоко', b: 'банан'}]

Я хочу найти значение для «а», то есть яблоко.

Я пытался: 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.

ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
1
0
25
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Приведенная ошибка показывает, что ваши данные на самом деле не являются varchar или json, а представляют собой массив ROW с 5 полями (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

Выход:

ттh>
яблоко

Другие вопросы по теме