summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author王宽 <[email protected]>2024-09-12 09:18:52 +0000
committer王宽 <[email protected]>2024-09-12 09:18:52 +0000
commit71a3d8bf0183c80dbd7dbf427e0c169c8ee26bd6 (patch)
tree1dac7fbc96f80ef415a87e4388ab0db569b9ace0
parent1dd4e02841f91457b26fea152a3a23146ff60a21 (diff)
parentf88fd6a24a4870b47e6a88c852d172c0850caf33 (diff)
Merge branch 'improve/udf' into 'develop'
[improve][core]FROM_UNIX_TIMESTAMP函数支持秒级时间戳输入,UNIX_TIMESTAMP_CONVERTER函数将小于10位时间戳作为秒级时间戳处理。 See merge request galaxy/platform/groot-stream!107
-rw-r--r--groot-core/src/main/java/com/geedgenetworks/core/udf/FromUnixTimestamp.java9
-rw-r--r--groot-core/src/main/java/com/geedgenetworks/core/udf/UnixTimestampConverter.java10
-rw-r--r--groot-core/src/test/java/com/geedgenetworks/core/udf/test/simple/FromUnixTimestampTest.java24
3 files changed, 34 insertions, 9 deletions
diff --git a/groot-core/src/main/java/com/geedgenetworks/core/udf/FromUnixTimestamp.java b/groot-core/src/main/java/com/geedgenetworks/core/udf/FromUnixTimestamp.java
index e1ba384..1700f7a 100644
--- a/groot-core/src/main/java/com/geedgenetworks/core/udf/FromUnixTimestamp.java
+++ b/groot-core/src/main/java/com/geedgenetworks/core/udf/FromUnixTimestamp.java
@@ -67,7 +67,14 @@ public class FromUnixTimestamp implements ScalarFunction {
public Event evaluate(Event event) {
if(event.getExtractedFields().containsKey(lookupFieldName)){
- String timestamp = sdf.format(Long.parseLong(event.getExtractedFields().get(lookupFieldName).toString()));
+ String value = event.getExtractedFields().get(lookupFieldName).toString();
+ String timestamp;
+ if (value.length() > 10) {
+ timestamp= sdf.format(Long.parseLong(value));
+ }else
+ {
+ timestamp= sdf.format(Long.parseLong(value)*1000);
+ }
event.getExtractedFields().put(outputFieldName, timestamp);
}
return event;
diff --git a/groot-core/src/main/java/com/geedgenetworks/core/udf/UnixTimestampConverter.java b/groot-core/src/main/java/com/geedgenetworks/core/udf/UnixTimestampConverter.java
index bdb41e0..a601944 100644
--- a/groot-core/src/main/java/com/geedgenetworks/core/udf/UnixTimestampConverter.java
+++ b/groot-core/src/main/java/com/geedgenetworks/core/udf/UnixTimestampConverter.java
@@ -62,15 +62,11 @@ public class UnixTimestampConverter implements ScalarFunction {
if(event.getExtractedFields().containsKey(lookupFieldName)) {
Long timestamp = Long.parseLong(event.getExtractedFields().get(lookupFieldName).toString());
- Instant instant = null;
- if (String.valueOf(timestamp).length() == 13) {
- // 时间戳长度大于10,表示为毫秒级时间戳
+ Instant instant ;
+ if (String.valueOf(timestamp).length() > 10) {
instant = Instant.ofEpochMilli(timestamp);
- } else if (String.valueOf(timestamp).length() == 10) {
- // 时间戳长度小于等于10,表示为秒级时间戳
- instant = Instant.ofEpochSecond(timestamp);
} else {
- return event;
+ instant = Instant.ofEpochSecond(timestamp);
}
switch (precision) {
case "seconds":
diff --git a/groot-core/src/test/java/com/geedgenetworks/core/udf/test/simple/FromUnixTimestampTest.java b/groot-core/src/test/java/com/geedgenetworks/core/udf/test/simple/FromUnixTimestampTest.java
index d02303b..87ca358 100644
--- a/groot-core/src/test/java/com/geedgenetworks/core/udf/test/simple/FromUnixTimestampTest.java
+++ b/groot-core/src/test/java/com/geedgenetworks/core/udf/test/simple/FromUnixTimestampTest.java
@@ -23,7 +23,7 @@ public class FromUnixTimestampTest {
udfContext.setOutput_fields(Arrays.asList("timestamp"));
}
@Test
- public void testFromUnixTimestampFunction() throws Exception {
+ public void testFromUnixTimestampMsFunction() throws Exception {
Map<String, Object> parameters = new HashMap<>();
parameters.put("precision", "seconds");
@@ -43,4 +43,26 @@ public class FromUnixTimestampTest {
assertEquals("2019-12-31 16:00:00:000", result2.getExtractedFields().get("timestamp"));
}
+
+ @Test
+ public void testFromUnixTimestampFunction() throws Exception {
+
+ Map<String, Object> parameters = new HashMap<>();
+ parameters.put("precision", "seconds");
+ parameters.put("timezone", "UTC");
+ udfContext.setParameters(parameters);
+ FromUnixTimestamp fromUnixTimestamp = new FromUnixTimestamp();
+ fromUnixTimestamp.open(null, udfContext);
+ Event event = new Event();
+ Map<String, Object> extractedFields = new HashMap<>();
+ extractedFields.put("unixTimestamp", 1577808000L);
+ event.setExtractedFields(extractedFields);
+ Event result1 = fromUnixTimestamp.evaluate(event);
+ assertEquals("2019-12-31 16:00:00", result1.getExtractedFields().get("timestamp"));
+ parameters.put("precision", "milliseconds");
+ fromUnixTimestamp.open(null, udfContext);
+ Event result2 = fromUnixTimestamp.evaluate(event);
+ assertEquals("2019-12-31 16:00:00:000", result2.getExtractedFields().get("timestamp"));
+
+ }
}