查询嵌套类型Map<string, timestamp>的completed字段问题求助
解决方案
根据你使用的SQL引擎不同,处理嵌套键值对字段的语法有所区别,以下是几种常见场景的解决方法:
1. 如果events是Map类型(如Spark SQL、Hive)
使用element_at函数或直接键索引,同时过滤掉无completed字段的行:
-- Spark SQL/Hive通用写法 SELECT element_at(events, 'completed') AS completed FROM table WHERE element_at(events, 'completed') IS NOT NULL
或者Spark中也可以直接用索引:
SELECT events['completed'] AS completed FROM table WHERE events['completed'] IS NOT NULL
2. 如果events是JSON字符串类型(如Hive、MySQL)
先解析JSON字符串再提取字段:
-- Hive SELECT get_json_object(events, '$.completed') AS completed FROM table WHERE get_json_object(events, '$.completed') IS NOT NULL -- MySQL SELECT JSON_UNQUOTE(JSON_EXTRACT(events, '$.completed')) AS completed FROM table WHERE JSON_CONTAINS_PATH(events, 'one', '$.completed')
3. 如果是PostgreSQL的JSONB类型
使用PostgreSQL专属的JSON操作符:
SELECT events ->> 'completed' AS completed FROM table WHERE events ? 'completed'
报错原因说明
你遇到的Column 'completed' cannot be resolved错误,大概率是因为:
- 你的SQL引擎不支持
events["completed"]这种索引语法 events是字符串类型而非结构化的Map/JSON类型,需要先解析成结构化对象才能提取字段
内容的提问来源于stack exchange,提问作者Maggie Liu
相关产品推荐
相关产品推荐

