0

到目前为止,涵盖@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
4

1 回答 1

0

我不相信 Ignite 目前对跨多行的自定义用户定义的 QuerySqlFunction 有干净的 API 支持。

如果您需要这样的东西,我建议您使用IgniteCompute API并将您的计算、lambda 或闭包分发到参与的 Ignite 节点。然后从闭包内部,您可以执行本地 SQL 查询,或执行任何其他缓存操作,包括对本地缓存数据的基于谓词的扫描。

这种方法将在多个 Ignite 节点上并行执行,并且应该表现良好。

于 2015-10-16T00:58:29.057 回答