目前为止看到的涵盖@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
我不相信Ignite目前有清晰的API支持跨多行自定义用户定义的QuerySqlFunction。
如果你需要这样的东西,我建议你使用IgniteCompute api,并将你的计算、lambda或闭包分发到参与的Ignite节点。然后,在闭包内部,您可以执行本地SQL查询,或执行任何其他缓存操作,包括对本地缓存数据进行基于谓词的扫描。
这种方法将在多个Ignite节点上并行执行,并且应该会表现良好。