Ignite SqlQuery和SqlFieldsQuery

Ignite SqlQuery和SqlFieldsQuery,ignite,Ignite,看来SqlQuery只支持以select*开头的sql?它不支持只选择某些列的其他sql吗 从person中选择id和name并将列映射到相应的POJO 如果我使用SqlFieldQuery来运行sql,结果是一个列表的QueryCursor(每个列表包含一条结果记录)。但如果sql以select*开头,则此列表的内容将与字段查询不同,如: 从人员中选择id、姓名、年龄 对于选择*,每个列表由3部分组成: 第一个元素是缓存的键 第二个元素是包含数据的pojo对象 tailing元素是每列的值 为

看来SqlQuery只支持以
select*
开头的sql?它不支持只选择某些列的其他sql吗
从person中选择id和name
并将列映射到相应的POJO

如果我使用SqlFieldQuery来运行sql,结果是一个列表的QueryCursor(每个列表包含一条结果记录)。但如果sql以
select*
开头,则此列表的内容将与字段查询不同,如:
从人员中选择id、姓名、年龄

对于
选择*
,每个列表由3部分组成:

  • 第一个元素是缓存的键

  • 第二个元素是包含数据的pojo对象

  • tailing元素是每列的值


  • 为什么会这样设计?如果我不知道SqlFieldsQuery运行的sql是什么,那么我需要额外的努力来找出列表中包含的内容。

    SqlQuery
    返回键和值对象,而
    SqlFieldsQuery
    允许选择特定字段。使用哪一个取决于您的用例


    目前,
    select*
    确实包括预定义的
    \u key
    \u val
    字段,这将在将来得到改进。但是,一般来说,在运行SQL查询时列出要获取的字段是一种很好的做法(这适用于任何SQL数据库,而不仅仅是Ignite)。例如,通过这种方式,您的代码将在模式更改时免受意外行为的影响。

    Tom,IGNITE JIRA中也有相同的问题。例如:作为一种解决方法,您可以指定列列表,而不使用星号。谢谢@kuaw26。另一种情况是,
    select*
    返回的前两列是K和V