我正在尝试将我的varchar列数据( stringifed )转换JSON为MAP数据类型,以便我可以将数据作为元素引用。
WITH
data(c) AS (
SELECT message from mydb.mytable
),
parsed AS (
SELECT cast(json_parse(c) as map(varchar, varchar)) AS m
FROM data
)
SELECT m['action'], m['uuid']
FROM parsed
Run Code Online (Sandbox Code Playgroud)
示例数据如下所示:
{"action":"send","timestamp":1566432054,"uuid":"1234"}
我尝试了此处提供的解决方案:How to cast varchar to MAP(VARCHAR,VARCHAR) in presto,这是我从values用select语句替换得到查询的地方,但它不起作用。我收到错误:
INVALID_CAST_ARGUMENT: Value cannot be cast to map(varchar,varchar)
json_parse+cast处理您的示例数据:
SELECT CAST(json_parse(str) AS map(varchar, varchar))
FROM (VALUES '{"action":"send","timestamp":1566432054,"uuid":"1234"}') t(str);
Run Code Online (Sandbox Code Playgroud)
我在 Presto 317 上测试了这个:
presto> SELECT CAST(json_parse(str) AS map(varchar, varchar))
-> FROM (VALUES '{"action":"send","timestamp":1566432054,"uuid":"1234"}') t(str);
_col0
------------------------------------------------
{action=send, uuid=1234, timestamp=1566432054}
(1 row)
Run Code Online (Sandbox Code Playgroud)
我的猜测是某些数据行与您的示例不同,并且该数据行不能是cast。您可以通过以下方式找到它try:
SELECT str
FROM your_table
WHERE str IS NOT NULL
AND try(CAST(json_parse(str) AS map(varchar, varchar))) IS NULL;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
10246 次 |
| 最近记录: |