Ignite SqlFieldsQuery特定键

时间:2017-08-11 17:02:50

标签: c++ ignite gridgain

使用ignite C ++ API,我试图找到一种方法来执行一个SqlFieldsQuery来选择一个特定的字段,但是想为一组键做这个。

实现此目的的一种方法是像这样执行SqlFieldsQuery,

SqlFieldsQuery("select field from Table where _key in (" + keys_string + ")")

其中keys_string是以逗号分隔的字符串的键列表。

不幸的是,与只为密钥集cache.GetAll(keys)执行keys相比,这需要很长时间。

是否有另一种更快的方法可以从点火缓存中获取一组键的特定字段?

修改

阅读完答案后,我尝试将查询更改为:

auto query = SqlFieldsQuery("select field from Table t join table(_key bigint = ?) i on t._key = i._key")

然后我从我的一组键中添加参数:

for(const auto& key: keys) query.AddArgument(key);

但在运行查询时,我收到错误:

Failed to bind parameter [idx=2, obj=159957, stmt=prep0: select field from Table t join table(_key bigint = ?) i on t._key = i._key {1: 159956}]

显然,这不起作用,因为只有一个'?'。

所以我接着尝试传递vector<int64_t>个密钥,但我收到一个错误,基本上说std::vector<int64_t>没有专门化点燃BinaryType。所以我按照定义的here做了这个。当打电话时。

writer.WriteInt64Array("data", data.data(), data.size())

我给该字段一个任意名称“data”。这会导致错误:

Failed to run map query remotely.

不幸的是,C ++ API既没有完整记录,也没有完整,所以我想知道我是否遗漏了某些内容,或者API不允许将数组作为参数传递给SqlFieldsQuery

0 个答案:

没有答案