如何为Hazelcast中User类的Map属性创建SQL映射?
解决方案
针对你的场景,要在SQL映射中支持查询customAttributes这个Map类型字段,只需在CREATE MAPPING语句里添加对应字段,并指定正确的Map类型声明即可——Hazelcast SQL原生支持Compact序列化下的复杂类型(包括Map)。
修改后的映射创建语句
CREATE OR REPLACE EXTERNAL MAPPING "hazelcast"."public"."user" EXTERNAL NAME "user" ( "name" VARCHAR, "customAttributes" MAP(VARCHAR, VARCHAR) ) TYPE "IMap" OPTIONS ( 'keyFormat' = 'java', 'keyJavaClass' = 'java.lang.Long', 'valueFormat' = 'compact', 'valueCompactTypeName' = 'my.package.User' )
关键说明
- 对于Java中的
Map<String, String>类型字段,Hazelcast SQL对应的类型是MAP(VARCHAR, VARCHAR),括号内的参数分别对应Map键和值的SQL类型。 - 必须确保
User类已正确注册Compact序列化:可以通过在类上添加@Compact注解(Hazelcast 5.0+支持),或手动通过CompactSerializationConfig注册序列化器,否则SQL引擎无法识别该字段结构。
执行查询
完成映射创建后,即可直接执行目标查询:
SELECT customAttributes FROM user;
如果需要查询Map中的具体键值对,还可以使用Hazelcast的Map索引语法:
-- 获取customAttributes中key为"age"的值 SELECT customAttributes['age'] FROM user;
内容的提问来源于stack exchange,提问作者Eugene
相关产品推荐
相关产品推荐

