如何在 presto 中将 varchar 转换为 MAP(VARCHAR,VARCHAR)

Jit*_*pta 4 cassandra presto trino

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

从 hello 中选择映射;

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

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

就像从 hello 中选择 CAST("mappings" as MAP);

这将在 presto 中引发错误。我们如何将其翻译成地图?

Mar*_*rso 10

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

例子:

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
Run Code Online (Sandbox Code Playgroud)

产生:

 _col0 | _col1
-------+-------
 baar  | bar1
Run Code Online (Sandbox Code Playgroud)


Jit*_*pta 1

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