This is an automated email from the ASF dual-hosted git repository.
jackietien pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/iotdb.git
The following commit(s) were added to refs/heads/master by this push:
new 67cd48da3fb Modify the UDF Time Dimension
67cd48da3fb is described below
commit 67cd48da3fbeec37ca3dc15c6c8ddd1e88796943
Author: Beasttt <[email protected]>
AuthorDate: Thu Dec 19 17:13:44 2024 +0800
Modify the UDF Time Dimension
---
.../iotdb/library/dprofile/UDAFIntegral.java | 41 ++++---------------
.../iotdb/library/drepair/UDTFTimestampRepair.java | 47 +++++++++++++++++-----
.../library/drepair/util/TimestampInterval.java | 22 +++++-----
.../library/drepair/util/TimestampRepair.java | 2 +-
4 files changed, 53 insertions(+), 59 deletions(-)
diff --git
a/library-udf/src/main/java/org/apache/iotdb/library/dprofile/UDAFIntegral.java
b/library-udf/src/main/java/org/apache/iotdb/library/dprofile/UDAFIntegral.java
index 2bb938d5f32..08a50fda271 100644
---
a/library-udf/src/main/java/org/apache/iotdb/library/dprofile/UDAFIntegral.java
+++
b/library-udf/src/main/java/org/apache/iotdb/library/dprofile/UDAFIntegral.java
@@ -27,7 +27,6 @@ import
org.apache.iotdb.udf.api.customizer.config.UDTFConfigurations;
import org.apache.iotdb.udf.api.customizer.parameter.UDFParameterValidator;
import org.apache.iotdb.udf.api.customizer.parameter.UDFParameters;
import org.apache.iotdb.udf.api.customizer.strategy.RowByRowAccessStrategy;
-import org.apache.iotdb.udf.api.exception.UDFException;
import org.apache.iotdb.udf.api.type.Type;
/**
@@ -37,11 +36,7 @@ import org.apache.iotdb.udf.api.type.Type;
public class UDAFIntegral implements UDTF {
private static final String TIME_UNIT_KEY = "unit";
- private static final String TIME_UNIT_MS = "1S";
private static final String TIME_UNIT_S = "1s";
- private static final String TIME_UNIT_M = "1m";
- private static final String TIME_UNIT_H = "1H";
- private static final String TIME_UNIT_D = "1d";
long unitTime;
long lastTime = -1;
@@ -53,41 +48,19 @@ public class UDAFIntegral implements UDTF {
validator
.validateInputSeriesNumber(1)
.validate(
- unit ->
- TIME_UNIT_D.equals(unit)
- || TIME_UNIT_H.equals(unit)
- || TIME_UNIT_M.equals(unit)
- || TIME_UNIT_S.equals(unit)
- || TIME_UNIT_MS.equals(unit),
- "Unknown time unit input",
- validator.getParameters().getStringOrDefault(TIME_UNIT_KEY,
TIME_UNIT_S));
+ x -> (long) x > 0,
+ "Unknown time unit input. Supported units are ns, us, ms, s, m, h,
d.",
+ Util.parseTime(
+ validator.getParameters().getStringOrDefault(TIME_UNIT_KEY,
TIME_UNIT_S),
+ validator.getParameters()));
}
@Override
public void beforeStart(UDFParameters parameters, UDTFConfigurations
configurations)
throws Exception {
configurations.setAccessStrategy(new
RowByRowAccessStrategy()).setOutputDataType(Type.DOUBLE);
- switch (parameters.getStringOrDefault(TIME_UNIT_KEY, TIME_UNIT_S)) {
- case TIME_UNIT_MS:
- unitTime = 1L;
- break;
- case TIME_UNIT_S:
- unitTime = 1000L;
- break;
- case TIME_UNIT_M:
- unitTime = 60000L;
- break;
- case TIME_UNIT_H:
- unitTime = 3600000L;
- break;
- case TIME_UNIT_D:
- unitTime = 3600000L * 24L;
- break;
- default:
- throw new UDFException(
- "Unknown time unit input: "
- + parameters.getStringOrDefault(TIME_UNIT_KEY, TIME_UNIT_S));
- }
+ unitTime =
+ Util.parseTime(parameters.getStringOrDefault(TIME_UNIT_KEY,
TIME_UNIT_S), parameters);
}
@Override
diff --git
a/library-udf/src/main/java/org/apache/iotdb/library/drepair/UDTFTimestampRepair.java
b/library-udf/src/main/java/org/apache/iotdb/library/drepair/UDTFTimestampRepair.java
index 9554cff6d18..2a605b9ab3a 100644
---
a/library-udf/src/main/java/org/apache/iotdb/library/drepair/UDTFTimestampRepair.java
+++
b/library-udf/src/main/java/org/apache/iotdb/library/drepair/UDTFTimestampRepair.java
@@ -20,6 +20,7 @@
package org.apache.iotdb.library.drepair;
import org.apache.iotdb.library.drepair.util.TimestampRepair;
+import org.apache.iotdb.library.util.Util;
import org.apache.iotdb.udf.api.UDTF;
import org.apache.iotdb.udf.api.access.RowWindow;
import org.apache.iotdb.udf.api.collector.PointCollector;
@@ -33,18 +34,30 @@ import org.apache.iotdb.udf.api.type.Type;
/** This function is used for timestamp repair. */
public class UDTFTimestampRepair implements UDTF {
String intervalMethod;
- int interval;
- int intervalMode;
+ long interval;
+ long intervalMode;
@Override
public void validate(UDFParameterValidator validator) throws Exception {
validator
.validateInputSeriesNumber(1)
- .validateInputSeriesDataType(0, Type.DOUBLE, Type.FLOAT, Type.INT32,
Type.INT64)
- .validate(
- x -> (Integer) x >= 0,
- "Interval should be a positive integer.",
- validator.getParameters().getIntOrDefault("interval", 0));
+ .validateInputSeriesDataType(0, Type.DOUBLE, Type.FLOAT, Type.INT32,
Type.INT64);
+
+ String intervalString =
validator.getParameters().getStringOrDefault("interval", null);
+ if (intervalString != null) {
+ try {
+ interval = Long.parseLong(intervalString);
+ } catch (NumberFormatException e) {
+ try {
+ interval = Util.parseTime(intervalString, validator.getParameters());
+ } catch (Exception ex) {
+ throw new UDFException("Invalid time format for interval.");
+ }
+ }
+ validator.validate(
+ x -> interval > 0,
+ "Invalid time unit input. Supported units are ns, us, ms, s, m, h,
d.");
+ }
}
@Override
@@ -53,16 +66,28 @@ public class UDTFTimestampRepair implements UDTF {
configurations
.setAccessStrategy(new
SlidingSizeWindowAccessStrategy(Integer.MAX_VALUE))
.setOutputDataType(parameters.getDataType(0));
+
intervalMethod = parameters.getStringOrDefault("method", "Median");
- interval = parameters.getIntOrDefault("interval", 0);
+ String intervalString = parameters.getStringOrDefault("interval", null);
+
+ if (intervalString != null) {
+ try {
+ interval = Long.parseLong(intervalString);
+ } catch (NumberFormatException e) {
+ interval = Util.parseTime(intervalString, parameters);
+ }
+ } else {
+ interval = 0;
+ }
+
if (interval > 0) {
intervalMode = interval;
} else if ("Median".equalsIgnoreCase(intervalMethod)) {
- intervalMode = -1;
+ intervalMode = -1L;
} else if ("Mode".equalsIgnoreCase(intervalMethod)) {
- intervalMode = -2;
+ intervalMode = -2L;
} else if ("Cluster".equalsIgnoreCase(intervalMethod)) {
- intervalMode = -3;
+ intervalMode = -3L;
} else {
throw new UDFException("Illegal method.");
}
diff --git
a/library-udf/src/main/java/org/apache/iotdb/library/drepair/util/TimestampInterval.java
b/library-udf/src/main/java/org/apache/iotdb/library/drepair/util/TimestampInterval.java
index 57feae84229..f596a3552db 100644
---
a/library-udf/src/main/java/org/apache/iotdb/library/drepair/util/TimestampInterval.java
+++
b/library-udf/src/main/java/org/apache/iotdb/library/drepair/util/TimestampInterval.java
@@ -44,19 +44,15 @@ public class TimestampInterval {
// get standard interval
// -1 median -2 mode -3 cluster
- public long getInterval(int mode) {
- switch (mode) {
- case -1:
- this.deltaT = getIntervalByMedian();
- break;
- case -2:
- this.deltaT = getIntervalByMode();
- break;
- case -3:
- this.deltaT = getIntervalByCluster();
- break;
- default:
- this.deltaT = mode;
+ public long getInterval(long mode) {
+ if (mode == -1L) {
+ this.deltaT = getIntervalByMedian();
+ } else if (mode == -2L) {
+ this.deltaT = getIntervalByMode();
+ } else if (mode == -3L) {
+ this.deltaT = getIntervalByCluster();
+ } else {
+ this.deltaT = mode;
}
return this.deltaT;
}
diff --git
a/library-udf/src/main/java/org/apache/iotdb/library/drepair/util/TimestampRepair.java
b/library-udf/src/main/java/org/apache/iotdb/library/drepair/util/TimestampRepair.java
index d1a856e56a9..4b98256436b 100644
---
a/library-udf/src/main/java/org/apache/iotdb/library/drepair/util/TimestampRepair.java
+++
b/library-udf/src/main/java/org/apache/iotdb/library/drepair/util/TimestampRepair.java
@@ -35,7 +35,7 @@ public class TimestampRepair {
protected long deltaT;
protected long start0;
- public TimestampRepair(RowIterator dataIterator, int intervalMode, int
startPointMode)
+ public TimestampRepair(RowIterator dataIterator, long intervalMode, int
startPointMode)
throws Exception {
ArrayList<Long> timeList = new ArrayList<>();
ArrayList<Double> originList = new ArrayList<>();