使用点燃C++ API,我试图找到一种方法来执行一个SqlFieldsQuery来选择一个特定的字段,但想要为一组键。要做到这一点Ignite SqlFieldsQuery特定键
的方法之一,就是做这样的SqlFieldsQuery,
SqlFieldsQuery("select field from Table where _key in (" + keys_string + ")")
其中keys_string
是关键作为一个逗号分隔字符串列表。
不幸的是,与仅为密钥集合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
。
你不能传递一个数组作为C++中的参数呢。为什么你想使用查询,如果你可以使用'GetAll()'? – isapego
由于带宽限制,我被告知查询特定字段可能比获取整个对象更快。 – Grieverheart