Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/319.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用JavaSQL语句在每个ApacheIgnite缓存中创建表?_Java_Sql_Ignite - Fatal编程技术网

如何使用JavaSQL语句在每个ApacheIgnite缓存中创建表?

如何使用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

我能够使用以下java代码创建ignite缓存:

    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;