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

Posted

技术标签:

【中文标题】如何在 presto 中将 varchar 转换为 MAP(VARCHAR,VARCHAR)【英文标题】:How to cast varchar to MAP(VARCHAR,VARCHAR) in presto 【发布时间】:2019-08-12 06:28:26 【问题描述】:

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

从 hello 中选择映射;

例如:"foo": "baar", "foo1": "bar1"

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

like select CAST("mappings" as MAP) from hello;

这会立即引发错误。我们如何将其转换为地图?

【问题讨论】:

【参考方案1】:

Presto 中没有MAP 的规范字符串表示,因此无法将其直接转换为MAP(VARCHAR, VARCHAR)。但是,如果您的字符串包含 JSON 映射,您可以使用 json_parse 函数将字符串转换为 JSON 类型的值,并通过 cast 将其转换为 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

【讨论】:

【参考方案2】:

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

【讨论】:

以上是关于如何在 presto 中将 varchar 转换为 MAP(VARCHAR,VARCHAR)的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Presto Athena 中将 varchar 转换为数组

在 Presto 中将存储为 INT 的时间转换为 VARCHAR

如何在 Presto 中将时间戳转换为日期?

如何在presto中将列转换为数组

如何在 Presto/Hive 中将日期格式 YYYY-MM-DD 转换为整数 YYYYMMDD?

如何在 Hive 或 Presto 中将以下字典格式列转换为不同的格式?