如何在 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