如何用@QuerySqlFunction实现SUM



目前为止看到的涵盖@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节点上并行执行,并且应该会表现良好。

最新更新