presto读取mysql中的json类型字段数据解决办法
转载:http://www.manongjc.com/article/44673.html
prestodb
mysql中如果字段类型为json类型的话,presto只可以查询,但是不能做转换操作,包括最常规的json函数全部不能用;说白了目前presto暂时不支持mysql 中json类型,先来看张mysql中的表
CREATE TABLE `test` (
`date` date NOT NULL DEFAULT '0000-00-00' ,
`id` varchar(20) NOT NULL ,
`data` json NOT NULL ,
PRIMARY KEY (`date`,`id`)
)
在presto中查看表结构
CREATE TABLE m_catalogs.m_schema.test (
date date,
id varchar(20),
data char(0) )
可以看到,data字段在presto中映射成了char(0),字段长度为零,你做任何操作转换操作都会报错,因为presto在解析的时候,发现你的字段长度为0,而你的实际长度不为零就会报如各种错,解决办法当然有,也比较简单
select json_extract(json_parse(trim(cast(cast(data as char(10000))as varchar(10000)))),'$.photo') from m_catalogs.m_schema.test limit 10
接下来你们也知道怎么处理了
cast
try_cast 报错了可以过滤掉出错的数据
数组 [1,2,3]
SELECT
try_cast(json_extract(json_parse(trim(try_cast(try_cast(sdsd AS char(65536))AS varchar(65536)))),'$[0]') as bigint) adad,
sdsd sdsd,
asas
FROM asasas
WHERE asa = 16