无法使用 SQL 工具查询现有的 Ignite 缓存

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)

ala*_*mar 5

为了能够在 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 。