如何使用JavaSQL语句在每个ApacheIgnite缓存中创建表?
我能够使用以下java代码创建ignite缓存:如何使用JavaSQL语句在每个ApacheIgnite缓存中创建表?,java,sql,ignite,Java,Sql,Ignite,我能够使用以下java代码创建ignite缓存: Ignition.setClientMode(true); Set<String> set = new HashSet<>(); set.add("127.0.0.1:48500..48520"); discoveryMulticastIpFinder.setAddresses(set); TcpDiscoverySpi discoverySpi = new TcpDiscove
Ignition.setClientMode(true);
Set<String> set = new HashSet<>();
set.add("127.0.0.1:48500..48520");
discoveryMulticastIpFinder.setAddresses(set);
TcpDiscoverySpi discoverySpi = new TcpDiscoverySpi();
discoverySpi.setIpFinder(discoveryMulticastIpFinder);
cfg.setDiscoverySpi(discoverySpi);
Ignite ignite = Ignition.start(cfg);
cacheConfiguration = new CacheConfiguration<>(CACHENAME);
cacheConfiguration.setName(CACHENAME);
cacheConfiguration.setSqlSchema("PUBLIC");
cacheConfiguration.setAtomicityMode(CacheAtomicityMode.ATOMIC);
cache = ignite.getOrCreateCache(cacheConfiguration).withKeepBinary();
System.out.println("All Available Cache on server : "+ignite.cacheNames());
但是这个查询只为所有缓存创建一个表。对于上述场景,我无法编写类似下面的查询
SELECT * FROM "CACHENAME".MYTABLE WHERE SOME_CONDITION = 1;
我引用了[1]:stackoverflow的问题,但这似乎对回答我的问题没有多大帮助
Collection<QueryEntity> entities = cacheConfiguration.getQueryEntities();
System.out.println("All available tables in "+CACHENAME+"cache : "+entities);
你的回答真的很有价值,也很受赞赏
谢谢。如果希望每个缓存有一个表,应该使用或属性定义它们 这样,您将创建以下表:
“cacheName”.TypeName
可以通过更改属性来更改表的名称
有关更多信息,请参阅以下文档页:如果我正确理解您的问题: 在ApacheIgnite中,可以有多个表使用相同的缓存(根据值类型进行区分),但不能有一个表使用多个缓存来保存其数据。所以缓存到表的映射是一对多的
另一个答案是
createtable
总是在PUBLIC
模式中创建表。在架构中,不能有多个名为MYTABLE
的表。您可以通过指定提示createtable
来创建具有给定名称的缓存。但是您仍然只能创建一个MYTABLE
您可以在表创建SQL查询中指定缓存名称。
缓存名称=
语法:
创建表employee(
名字叫瓦查尔,
电话号码(varchar)
使用“模板=分区,备份=1,仿射=国家代码,缓存名称=风险
Collection<QueryEntity> entities = cacheConfiguration.getQueryEntities();
System.out.println("All available tables in "+CACHENAME+"cache : "+entities);
SELECT * FROM "CACHE_NAME".MYTABLE WHERE SOME_CONDITION = 1;