Skip to content

Commit 02254b9

Browse files
authored
[Fix][Connector-V2] Fixed missing timestamp accuracy of starrocks connector (#9096)
1 parent 4140cd1 commit 02254b9

File tree

2 files changed

+35
-14
lines changed

2 files changed

+35
-14
lines changed

seatunnel-connectors-v2/connector-starrocks/src/main/java/org/apache/seatunnel/connectors/seatunnel/starrocks/serialize/StarRocksBaseSerializer.java

+12-8
Original file line numberDiff line numberDiff line change
@@ -19,25 +19,29 @@
1919

2020
import org.apache.seatunnel.api.table.type.SeaTunnelDataType;
2121
import org.apache.seatunnel.common.exception.CommonErrorCodeDeprecated;
22-
import org.apache.seatunnel.common.utils.DateTimeUtils;
2322
import org.apache.seatunnel.common.utils.DateUtils;
2423
import org.apache.seatunnel.common.utils.JsonUtils;
2524
import org.apache.seatunnel.common.utils.TimeUtils;
2625
import org.apache.seatunnel.connectors.seatunnel.starrocks.exception.StarRocksConnectorException;
2726

28-
import lombok.Builder;
29-
3027
import java.time.LocalDate;
3128
import java.time.LocalDateTime;
3229
import java.time.LocalTime;
30+
import java.time.format.DateTimeFormatter;
31+
import java.time.format.DateTimeFormatterBuilder;
32+
import java.time.temporal.ChronoField;
3333

3434
public class StarRocksBaseSerializer {
35-
@Builder.Default private DateUtils.Formatter dateFormatter = DateUtils.Formatter.YYYY_MM_DD;
35+
private DateUtils.Formatter dateFormatter = DateUtils.Formatter.YYYY_MM_DD;
3636

37-
@Builder.Default
38-
private DateTimeUtils.Formatter dateTimeFormatter = DateTimeUtils.Formatter.YYYY_MM_DD_HH_MM_SS;
37+
private DateTimeFormatter dateTimeFormatter =
38+
new DateTimeFormatterBuilder()
39+
.appendPattern("yyyy-MM-dd HH:mm:ss")
40+
.optionalStart()
41+
.appendFraction(ChronoField.NANO_OF_SECOND, 0, 9, true)
42+
.toFormatter();
3943

40-
@Builder.Default private TimeUtils.Formatter timeFormatter = TimeUtils.Formatter.HH_MM_SS;
44+
private TimeUtils.Formatter timeFormatter = TimeUtils.Formatter.HH_MM_SS;
4145

4246
protected Object convert(SeaTunnelDataType dataType, Object val) {
4347
if (val == null) {
@@ -59,7 +63,7 @@ protected Object convert(SeaTunnelDataType dataType, Object val) {
5963
case TIME:
6064
return TimeUtils.toString((LocalTime) val, timeFormatter);
6165
case TIMESTAMP:
62-
return DateTimeUtils.toString((LocalDateTime) val, dateTimeFormatter);
66+
return ((LocalDateTime) val).format(dateTimeFormatter);
6367
case ARRAY:
6468
case MAP:
6569
return JsonUtils.toJsonString(val);

seatunnel-connectors-v2/connector-starrocks/src/test/java/org/apache/seatunnel/connectors/seatunnel/starrocks/serialize/StarRocksJsonSerializerTest.java

+23-6
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919

2020
import org.apache.seatunnel.api.table.type.ArrayType;
2121
import org.apache.seatunnel.api.table.type.BasicType;
22+
import org.apache.seatunnel.api.table.type.LocalTimeType;
2223
import org.apache.seatunnel.api.table.type.MapType;
2324
import org.apache.seatunnel.api.table.type.SeaTunnelDataType;
2425
import org.apache.seatunnel.api.table.type.SeaTunnelRow;
@@ -27,30 +28,46 @@
2728
import org.junit.jupiter.api.Assertions;
2829
import org.junit.jupiter.api.Test;
2930

31+
import java.time.LocalDateTime;
32+
import java.time.format.DateTimeFormatter;
33+
import java.time.format.DateTimeFormatterBuilder;
34+
import java.time.temporal.ChronoField;
3035
import java.util.Collections;
3136

3237
public class StarRocksJsonSerializerTest {
3338

39+
private DateTimeFormatter dateTimeFormatter =
40+
new DateTimeFormatterBuilder()
41+
.appendPattern("yyyy-MM-dd HH:mm:ss")
42+
.optionalStart()
43+
.appendFraction(ChronoField.NANO_OF_SECOND, 0, 9, true)
44+
.toFormatter();
45+
3446
@Test
3547
public void serialize() {
36-
String[] filedNames = {"id", "name", "array", "map"};
37-
SeaTunnelDataType<?>[] filedTypes = {
48+
String[] fieldNames = {"id", "name", "array", "map", "timestamp"};
49+
SeaTunnelDataType<?>[] fieldTypes = {
3850
BasicType.LONG_TYPE,
3951
BasicType.STRING_TYPE,
4052
ArrayType.STRING_ARRAY_TYPE,
41-
new MapType<>(BasicType.STRING_TYPE, BasicType.STRING_TYPE)
53+
new MapType<>(BasicType.STRING_TYPE, BasicType.STRING_TYPE),
54+
LocalTimeType.LOCAL_DATE_TIME_TYPE
4255
};
4356

44-
SeaTunnelRowType seaTunnelRowType = new SeaTunnelRowType(filedNames, filedTypes);
57+
SeaTunnelRowType seaTunnelRowType = new SeaTunnelRowType(fieldNames, fieldTypes);
4558
StarRocksJsonSerializer starRocksJsonSerializer =
4659
new StarRocksJsonSerializer(seaTunnelRowType, false);
4760
Object[] fields = {
48-
1, "Tom", new String[] {"tag1", "tag2"}, Collections.singletonMap("key1", "value1")
61+
1,
62+
"Tom",
63+
new String[] {"tag1", "tag2"},
64+
Collections.singletonMap("key1", "value1"),
65+
LocalDateTime.parse("2024-01-25 07:55:45.123", dateTimeFormatter)
4966
};
5067
SeaTunnelRow seaTunnelRow = new SeaTunnelRow(fields);
5168
String jsonString = starRocksJsonSerializer.serialize(seaTunnelRow);
5269
Assertions.assertEquals(
53-
"{\"id\":1,\"name\":\"Tom\",\"array\":[\"tag1\",\"tag2\"],\"map\":{\"key1\":\"value1\"}}",
70+
"{\"id\":1,\"name\":\"Tom\",\"array\":[\"tag1\",\"tag2\"],\"map\":{\"key1\":\"value1\"},\"timestamp\":\"2024-01-25 07:55:45.123\"}",
5471
jsonString);
5572
}
5673
}

0 commit comments

Comments
 (0)