Skip to content

Commit c2f1afe

Browse files
committed
Refactor skewness,corr calculation in central moment accumulators
1 parent 2523ceb commit c2f1afe

6 files changed

Lines changed: 13 additions & 20 deletions

File tree

iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/aggregation/CentralMomentAccumulator.java

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -177,13 +177,10 @@ public void outputFinal(ColumnBuilder columnBuilder) {
177177
if (momentType == MomentType.SKEWNESS) {
178178
if (count < 3) {
179179
columnBuilder.appendNull();
180-
} else {
181-
182-
double variance = m2 / (count - 1);
183-
double stdev = Math.sqrt(variance);
184-
double result = (count * m3) / ((count - 1) * (count - 2) * stdev * stdev * stdev);
185-
columnBuilder.writeDouble(result);
180+
return;
186181
}
182+
double result = Math.sqrt((double) count) * m3 / Math.pow(m2, 1.5);
183+
columnBuilder.writeDouble(result);
187184
} else {
188185
if (count < 4) {
189186
columnBuilder.appendNull();

iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/aggregation/CorrelationAccumulator.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -180,7 +180,7 @@ public void outputFinal(ColumnBuilder columnBuilder) {
180180
columnBuilder.appendNull();
181181
} else if (m2X == 0 || m2Y == 0) {
182182

183-
columnBuilder.writeDouble(0.0);
183+
columnBuilder.appendNull();
184184
} else {
185185
columnBuilder.writeDouble(c2 / Math.sqrt(m2X * m2Y));
186186
}

iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/source/relational/aggregation/TableCentralMomentAccumulator.java

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -192,12 +192,10 @@ public void evaluateFinal(ColumnBuilder columnBuilder) {
192192
if (momentType == CentralMomentAccumulator.MomentType.SKEWNESS) {
193193
if (count < 3) {
194194
columnBuilder.appendNull();
195-
} else {
196-
double variance = m2 / (count - 1);
197-
double stdev = Math.sqrt(variance);
198-
double result = (count * m3) / ((count - 1) * (count - 2) * stdev * stdev * stdev);
199-
columnBuilder.writeDouble(result);
195+
return;
200196
}
197+
double result = Math.sqrt((double) count) * m3 / Math.pow(m2, 1.5);
198+
columnBuilder.writeDouble(result);
201199
} else {
202200
if (count < 4) {
203201
columnBuilder.appendNull();

iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/source/relational/aggregation/TableCorrelationAccumulator.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -216,7 +216,7 @@ public void evaluateFinal(ColumnBuilder columnBuilder) {
216216
if (count < 2) {
217217
columnBuilder.appendNull();
218218
} else if (m2X == 0 || m2Y == 0) {
219-
columnBuilder.writeDouble(0.0);
219+
columnBuilder.appendNull();
220220
} else {
221221
columnBuilder.writeDouble(c2 / Math.sqrt(m2X * m2Y));
222222
}

iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/source/relational/aggregation/grouped/GroupedCentralMomentAccumulator.java

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -242,13 +242,11 @@ public void evaluateFinal(int groupId, ColumnBuilder columnBuilder) {
242242
if (momentType == CentralMomentAccumulator.MomentType.SKEWNESS) {
243243
if (count < 3) {
244244
columnBuilder.appendNull();
245-
} else {
246-
double m3 = m3s.get(groupId);
247-
double variance = m2 / (count - 1);
248-
double stdev = Math.sqrt(variance);
249-
double result = (count * m3) / ((count - 1) * (count - 2) * stdev * stdev * stdev);
250-
columnBuilder.writeDouble(result);
245+
return;
251246
}
247+
double m3 = m3s.get(groupId);
248+
double result = Math.sqrt((double) count) * m3 / Math.pow(m2, 1.5);
249+
columnBuilder.writeDouble(result);
252250
} else {
253251
if (count < 4) {
254252
columnBuilder.appendNull();

iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/source/relational/aggregation/grouped/GroupedCorrelationAccumulator.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -230,7 +230,7 @@ public void evaluateFinal(int groupId, ColumnBuilder columnBuilder) {
230230
if (counts.get(groupId) < 2) {
231231
columnBuilder.appendNull();
232232
} else if (m2Xs.get(groupId) == 0 || m2Ys.get(groupId) == 0) {
233-
columnBuilder.writeDouble(0.0);
233+
columnBuilder.appendNull();
234234
} else {
235235
columnBuilder.writeDouble(
236236
c2s.get(groupId) / Math.sqrt(m2Xs.get(groupId) * m2Ys.get(groupId)));

0 commit comments

Comments
 (0)