man*_*ato 0 java sql caching dbeaver ignite
我正在尝试查询我通过 Java 脚本创建的 Apache Ignite 缓存(版本 2.2):
TcpDiscoverySpi spi = new TcpDiscoverySpi();
TcpDiscoveryVmIpFinder ipFinder=new TcpDiscoveryMulticastIpFinder();
List<String> adresses=new ArrayList<String>();
adresses.add("127.0.0.1:48500..48520");
ipFinder.setAddresses(adresses);
spi.setIpFinder(ipFinder);
IgniteConfiguration cfg=new IgniteConfiguration().setDiscoverySpi(spi).setClientMode(true);
CacheConfiguration cache_conf=new CacheConfiguration<String,Custom_Class>().setCacheMode(CacheMode.PARTITIONED).setAtomicityMode(CacheAtomicityMode.ATOMIC).setBackups(1).
setIndexedTypes(String.class,Custom_Class.class).setName("Spark_Ignite");
Ignite ignite=Ignition.getOrStart(cfg);
ignite.getOrCreateCache(cache_conf);
System.out.println("[INFO] CACHE CREATED");
ignite.close();
Run Code Online (Sandbox Code Playgroud)
我正在使用 DBeaver 对该缓存执行简单的 SQL 查询。
问题是,当我尝试进行查询时,出现此错误:
SELECT * FROM Custom_Class;
Table "Custom_Class" not found; SQL statement:SELECT * FROM Custom_Class
Run Code Online (Sandbox Code Playgroud)
如果我运行此查询,则相同:
SELECT * FROM Spark_Ignite;
Table "Spark_Ignite" not found; SQL statement:SELECT * FROM Spark_Ignite
Run Code Online (Sandbox Code Playgroud)
但是,如果我按照此处提到的说明进行操作:https://apacheignite-sql.readme.io/docs/sql-tooling,我可以毫无问题地获得查询结果。
我运行了 ignitevisor.sh,确实所有的缓存都在那里,而且都有记录:
这里可能有什么问题?
谢谢你。
更新
使用答案中提到的引号,我能够查询表,但它不显示任何记录,而 ignitevisor 显示 63。这是我用于该类的脚本:
public class Custom_Class implements Serializable {
@QuerySqlField(index = true)
private String a;
@QuerySqlField(index = true)
private String b;
@QuerySqlField(index = true)
private String c;
@QuerySqlField(index = true)
private String d;
@QuerySqlField(index = true)
private String e;
@QuerySqlField(index = true)
private String f;
@QuerySqlField(index = true)
private String g;
@QuerySqlField(index = true)
private String h;
}
Run Code Online (Sandbox Code Playgroud)
为了能够在 SQL 中使用缓存,它需要是:
CREATE TABLEDML创建。在这种情况下,架构是 PUBLIC,这通常是默认值。indexedTypes在其指定的cacheConfiguration,与这些类型的注解一起。在这种情况下,架构是"cacheName",引号很重要,表名是VALUETYPEINCAPS。如果 key 是原始类型_key,则其字段名称是,如果 value 是原始类型,则将_val它们排除在*.queryEntities在其指定的cacheConfiguration。在这种情况下,您可以为原始类型指定表名和列名,但架构是"cacheName".如果缓存是在没有 SQL 支持的情况下创建的,则只能通过销毁和重新创建缓存来添加它。
我可以看到您的缓存具有索引类型。现在,怎么样:
INSERT INTO "Spark_Ignite".CUSTOM_CLASS(_key, id) VALUES ('foo', 1);
SELECT _key, * FROM "Spark_Ignite".CUSTOM_CLASS;
Run Code Online (Sandbox Code Playgroud)
您还可以尝试在sqllineApache Ignite 附带的工具中调用 !tables 。