我有以前使用 json_each(x) 从 Postgresql 中提取的数据,我正在数据库迁移后在 Presto 中寻找 json_each 的等效项以将我的数据提取到多行中。原来的格式是这样的 {"0":100.0,"57000":75.0,"47000":80.0}
预期输出将键和值分成多行的 2 列
有什么想法吗?
最佳答案
这可以通过组合 Trino (formerly PrestoSQL) JSON functions 来实现与 UNNEST
.步骤是:
- 使用
json_parse
将原始 JSON 解析为 JSON 类型 - 使用 JSON cast expression 从 JSON 转换为 map
- 使用 SQL 标准将 map 取消嵌套到行中
UNNEST
table function
这是一个使用您的示例数据的查询:
WITH t AS (SELECT '{"0":100.0,"57000":75.0,"47000":80.0}' AS raw_json)
SELECT key, value
FROM
t,
UNNEST(
CAST(json_parse(raw_json) AS map(integer, double))
) x(key, value)
为了将来引用,此处描述了所有功能:https://trino.io/docs/current/functions.html
关于Presto 中的 Postgresql json_each 等价物,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56818960/