使用 Presto 解析 JSON 列

Parse JSON column using Presto

我在 Presto 中有一个 table 看起来像

Date Rates
1/1/2022 {"USD":"725.275","GBP":"29.275000000000002","CAD":"0.713352"}
1/2/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

但使用他们的 documentation.

似乎无法弄清楚

假设 RatesJSON 类型的列(否则使用 json_parse)并且您不想使用 json_extract_scalarjson_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)

输出:

date currence rate
1/1/2022 CAD 0.713352
1/1/2022 GBP 29.275000000000002
1/1/2022 USD 725.275
1/2/2022 CAD 0.813352
1/2/2022 GBP 40.275
1/2/2022 USD 745.275