到目前为止,涵盖@QuerySqlFunction的示例都是微不足道的。我在下面放了一个。但是,我正在寻找提供跨行计算的示例/解决方案/提示,例如平均值、总和……这可能吗?
在示例中,函数从数组返回值 0,基本上是 ARRAY_GET(x, 0) 的实现。我见过的所有其他例子都是类似的:1 行,获取一个值,用它做一些事情。但我需要能够计算分组结果的总和,或者可能更多的业务逻辑。如果有人可以为我提供 SUM 的 QuerySqlFunction,我认为可以让我做的不仅仅是 SUM。
第 1 步:编写函数
public class MyIgniteFunctions {
@QuerySqlFunction
public static double value1(double[] values) {
return values[0];
}
}
第二步:注册函数
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