到目前为止看到的涵盖 @QuerySqlFunction 的例子很简单。我在下面放了一个。但是,我正在寻找一个示例/解决方案/提示来提供交叉行计算,例如:平均,总和,......这可能吗?
在该示例中,函数从数组返回值0,基本上是ARRAY_GET(x,0)的实现。我见过的所有其他例子都是相似的:1行,得到一个值,用它做点什么。但我需要能够计算分组结果的总和,或者可能有更多的业务逻辑。如果有人可以为我提供了用于SUM的QuerySqlFunction,我认为这将允许我做的不仅仅是SUM。
第1步:编写函数
public class MyIgniteFunctions {
@QuerySqlFunction
public static double value1(double[] values) {
return values[0];
}
}
第2步:注册功能
CacheConfiguration<Long, MyFact> factResultCacheCfg = ...
factResultCacheCfg.setSqlFunctionClasses(new Class[] { MyIgniteFunctions.class });
第3步:在查询中使用
SELECT
MyDimension.groupBy1,
MyDimension.groupBy2,
SUM(VALUE1(MyFact.values))
FROM
"dimensionCacheName".DimDimension,
"factCacheName".FactResult
WHERE
MyDimension.uid=MyFact.dimensionUid
GROUP BY
MyDimension.groupBy1,
MyDimension.groupBy2
答案 0 :(得分:0)
我不相信Ignite目前对跨越多行的自定义用户定义的QuerySqlFunction提供了干净的API支持。
如果您需要这样的内容,我建议您使用IgniteCompute APIs并将计算,lambda或闭包分发给参与的Ignite节点。然后,从闭包内部,您可以执行本地SQL查询,或执行任何其他缓存操作,包括对本地缓存数据的基于谓词的扫描。
这种方法将在多个Ignite节点上并行执行,并且性能良好。