Разобрать столбец JSON с помощью Presto

У меня есть таблица в Presto, которая выглядит как

ДатаСтавки
01.01.2022{"USD":"725,275","GBP":"29,275000000000002","CAD":"0,713352"}
02.01.2022{"USD":"745,275","GBP":"40,275000000000002","CAD":"0,813352"}

Я бы хотел, чтобы он напоминал вывод запроса:

Date    Currency    Rate
1/1/2022    USD 725.275
1/2/2022    USD 745.275
1/1/2022    GBP 29.275
1/2/2022    GBP 40.275
1/1/2022    CAD 0.713352
1/2/2022    CAD 0.813352

Но не могу понять это, используя их документация.

Я пробовал json_extract_scalar, но не вижу способа использовать его, не вводя вручную «json_extract_scalar(Rates, ‘$.USD’)…. для каждой ставки. На самом деле у меня их много, поэтому вручную набрав это выход не идеален.

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

Ответы 1

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

Предполагая, что Rates является столбцом типа JSON (в противном случае используйте json_parse), и вы не хотите обрабатывать каждую валюту «вручную» с помощью json_extract_scalar (json_extract_scalar(Rates, '$.USD'), json_extract_scalar(Rates, '$.GBP'), ...) - общий способ обработки «динамического json» - это привести его к map (например, map(varchar, double) в данном случае) и используйте unnest:

WITH dataset ( Date,Rates) AS (
    VALUES  ('1/1/2022', json '{"USD":"725.275","GBP":"29.275000000000002","CAD":"0.713352"}'),
            ('1/2/2022', json '{"USD":"745.275","GBP":"40.275000000000002","CAD":"0.813352"}')

) 

--query
select date, currence, rate
from dataset
cross join unnest(cast(rates as map(varchar, double))) t(currence, rate)

Выход:

датакурспоказатель
01.01.2022САПР0,713352
01.01.2022Фунт стерлингов29.275000000000002
01.01.2022доллар США725,275
02.01.2022САПР0,813352
02.01.2022Фунт стерлингов40.275
02.01.2022доллар США745,275

Это сделал трюк! Ставки были не в формате JSON, поэтому пришлось завернуть в 'json_parse'.

Ryan Erwin 16.05.2022 21:16

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