使用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
。