У меня есть таблица в 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
Но не могу понять это, используя их документация.
Предполагая, что 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'.
Я пробовал json_extract_scalar, но не вижу способа использовать его, не вводя вручную «json_extract_scalar(Rates, ‘$.USD’)…. для каждой ставки. На самом деле у меня их много, поэтому вручную набрав это выход не идеален.