presto - 从 Presto varchar 列解析 JSON 失败
问题描述
我正在尝试将我的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
示例数据如下所示:
{"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);
我在 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)
我的猜测是某些数据行与您的示例不同,并且此数据行不能cast
。您可以通过以下方式找到它try
:
SELECT str
FROM your_table
WHERE str IS NOT NULL
AND try(CAST(json_parse(str) AS map(varchar, varchar))) IS NULL;
推荐阅读
- python - Python打字如何描述类型
- android - Android 中三星 J7 Pro 设备中的 FileUriExposedException 错误
- javascript - 使用 jQuery Datepicker 的英国夏令时(计算丢失 1 天)
- mysql - 如何 mysqlimport 本地导出到远程 mysql 服务器?
- python - Conda Jupyer 笔记本
- c# - 在 LabelFor 上输入值时提交表单
- regex - 元字符 '.' 是如何工作的?有字符类
- php - 如何在wordpress中使用if和elseif而不会出错
- python - 如何在 django、python 中更改管理字段名称
- c - 区分C中的返回值和错误