2015-10-13 43 views
0

迄今爲止看到的例子覆蓋了@QuerySqlFunction是微不足道的。我在下面放一個。然而,我正在尋找提供交叉行計算的示例/解決方案/提示,例如,平均,總和,...這可能嗎?如何使用@QuerySqlFunction實現SUM?

在該示例中,函數從數組中返回值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

Ignite支持標準的sql SUM功能。這對你來說足夠了嗎?或者你想實現一些自定義聚合函數? –

+0

這個問題似乎是另一個問題的副本,並在這裏回答:http://stackoverflow.com/questions/33097103/how-to-sum-an-array-of-doubles-with-ignite-data-grid- sql – Dmitriy

+0

我知道並理解有可用的標準sql SUM函數。我不需要一個SUM。我需要的是QuerySqlFunction的一個示例實現,它提供跨多行的功能。將SUM作爲QuerySqlFunction的實現將是一個很好的例子。這使我能夠理解如何在給定特定上下文的情況下跨多行編寫QuerySqlFunction,例如,一個「由......組成」。 –

回答

0

我不相信Ignite目前對跨越多行的自定義用戶定義的QuerySqlFunction有乾淨的API支持。

如果您需要類似的東西,我建議您使用IgniteCompute APIs並將您的計算,lambdas或閉包分配給參與的Ignite節點。然後從閉包內部執行本地SQL查詢,或者執行任何其他緩存操作,包括對本地緩存數據進行基於謂詞的掃描。

該方法將並行執行跨多個Ignite節點,並且應該執行得很好。