ignite data grid / sqlでdoubleの配列を合計する方法は?
与えられた: 1 つのディメンション テーブルMyDimensionと 1 つのファクト テーブルMyFact。それらを結合し、いくつかの次元 ** でグループ化し、それに関連する事実を合計します。次に、単一の double 値ではなく、double の配列を含むファクト テーブルを合計することを検討してください。取得する合計は、すべての配列の合計を表す配列です。
単語の例として: 「すべての配列は」と仮定します:
array 1: double[] { 1.0, 2.0, 3.0, 4.0, 5.0 }
array 2: double[] { 2.0, 3.0, 4.0, 5.0, 6.0 }
array 3: double[] { 3.0, 4.0, 5.0, 6.0, 7.0 }
その場合、「すべての配列の合計を表す配列」は次のようになります: double[] { 6.0, 9.0, 12.0, 15.0, 18.0 }
@QuerySqlFunctionを調べましたが、役立つ例が見つかりませんでした。
これは sql である必要はありません。キャッシュから配列の合計を取得する方法はどれでも素晴らしいでしょう。
ありがとう、
ヨハン
マイファクト
package com.hsbc.rsl.babarpoc.ignite.starschema;
import org.apache.ignite.cache.query.annotations.QuerySqlField;
public class MyFact {
/** Primary key. */
@QuerySqlField(index = true)
private long uid;
@QuerySqlField(index = true)
private long dimensionUid;
@QuerySqlField
private double values[];
public MyFact(long uid, long dimensionUid, double values[]) {
this.uid = uid;
this.dimensionUid = dimensionUid;
this.values = values;
}
public long getUid() {
return uid;
}
public void setUid(long uid) {
this.uid = uid;
}
public long getDimensionUid() {
return dimensionUid;
}
public void setDimensionUid(long dimensionUid) {
this.dimensionUid = dimensionUid;
}
public double[] getValues() {
return values;
}
public void setValues(double[] values) {
this.values = values;
}
}
マイディメンション
import org.apache.ignite.cache.query.annotations.QuerySqlField;
public class MyDimension {
@QuerySqlField(index = true)
private long uid;
@QuerySqlField
private String groupBy1;
@QuerySqlField
private String groupBy2;
public MyDimension(String groupBy1, String groupBy2) {
this.groupBy1 = groupBy1;
this.groupBy2 = groupBy2;
}
public long getUid() {
return uid;
}
public void setUid(long uid) {
this.uid = uid;
}
public String getGroupBy1() {
return groupBy1;
}
public void setGroupBy1(String groupBy1) {
this.groupBy1 = groupBy1;
}
public String getGroupBy2() {
return groupBy2;
}
public void setGroupBy2(String groupBy2) {
this.groupBy2 = groupBy2;
}
}
クエリ (機能しないクエリ)
以下に SQL の例を追加します。これは 1 の値の合計を返します。つまり、配列に対しては機能しません。エラーが発生します。
SELECT
MyDimension.groupBy1,
MyDimension.groupBy2,
SUM(MyFact.values)
FROM
"dimensionCacheName".DimDimension,
"factCacheName".FactResult
WHERE
MyDimension.uid=MyFact.dimensionUid
GROUP BY
MyDimension.groupBy1,
MyDimension.groupBy2