7

我在 presto 中有表,名为 ("mappings") 的一列将键值对作为字符串

从 hello 中选择映射;

例如:{“foo”:“baar”,“foo1”:“bar1”}

我想将“映射”列转换为 MAP

比如 select CAST("mappings" as MAP) from hello;

这将立即引发错误。我们如何将其翻译成地图?

4

2 回答 2

14

Presto中没有 a 的规范字符串表示形式MAP,因此无法将其直接转换为MAP(VARCHAR, VARCHAR). 但是,如果您的字符串包含 JSON 映射,您可以使用该json_parse函数将字符串转换为类型的值,并通过castJSON将其转换为 SQL 。MAP

例子:

WITH
data(c) AS (
    VALUES '{"foo": "baar", "foo1": "bar1"}'
),
parsed AS (
    SELECT cast(json_parse(c) as map(varchar, varchar)) AS m
    FROM data
)
SELECT m['foo'], m['foo1']
FROM parsed

产生:

 _col0 | _col1
-------+-------
 baar  | bar1
于 2019-03-21T14:44:52.727 回答
1

select cast( json_parse(mappings) as MAP(VARCHAR,VARCHAR)) from hello1;

于 2019-03-21T11:53:00.910 回答