You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@beam.apache.org by bh...@apache.org on 2021/11/19 16:30:04 UTC
[beam] branch master updated: [BEAM-13286] RowJson should expect ReadableInstant for DATETIME values in Rows (#16015)
This is an automated email from the ASF dual-hosted git repository.
bhulette pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/beam.git
The following commit(s) were added to refs/heads/master by this push:
new 4392c58 [BEAM-13286] RowJson should expect ReadableInstant for DATETIME values in Rows (#16015)
4392c58 is described below
commit 4392c5897b0bba7baeee41253f90cd251436d323
Author: Brian Hulette <bh...@google.com>
AuthorDate: Fri Nov 19 08:29:04 2021 -0800
[BEAM-13286] RowJson should expect ReadableInstant for DATETIME values in Rows (#16015)
* DATETIME internal value is a ReadableInstant
* Cast, dont assert
* Spotless :(
---
.../core/src/main/java/org/apache/beam/sdk/util/RowJson.java | 5 +++--
.../src/test/java/org/apache/beam/sdk/util/RowJsonTest.java | 12 +++++++++---
2 files changed, 12 insertions(+), 5 deletions(-)
diff --git a/sdks/java/core/src/main/java/org/apache/beam/sdk/util/RowJson.java b/sdks/java/core/src/main/java/org/apache/beam/sdk/util/RowJson.java
index 351eacb..be794eb 100644
--- a/sdks/java/core/src/main/java/org/apache/beam/sdk/util/RowJson.java
+++ b/sdks/java/core/src/main/java/org/apache/beam/sdk/util/RowJson.java
@@ -72,7 +72,7 @@ import org.apache.beam.vendor.guava.v26_0_jre.com.google.common.collect.Immutabl
import org.apache.beam.vendor.guava.v26_0_jre.com.google.common.collect.ImmutableMap;
import org.apache.beam.vendor.guava.v26_0_jre.com.google.common.collect.ImmutableSet;
import org.checkerframework.checker.nullness.qual.Nullable;
-import org.joda.time.DateTime;
+import org.joda.time.ReadableInstant;
/**
* Jackson serializer and deserializer for {@link Row Rows}.
@@ -527,7 +527,8 @@ public class RowJson {
gen.writeNumber((BigDecimal) value);
break;
case DATETIME:
- gen.writeString(((DateTime) value).toString()); // ISO 8601 format
+ // ReadableInstant.toString produces ISO8601 format string
+ gen.writeString(((ReadableInstant) value).toString());
break;
case ARRAY:
case ITERABLE:
diff --git a/sdks/java/core/src/test/java/org/apache/beam/sdk/util/RowJsonTest.java b/sdks/java/core/src/test/java/org/apache/beam/sdk/util/RowJsonTest.java
index 4ff907c..2292688 100644
--- a/sdks/java/core/src/test/java/org/apache/beam/sdk/util/RowJsonTest.java
+++ b/sdks/java/core/src/test/java/org/apache/beam/sdk/util/RowJsonTest.java
@@ -42,6 +42,8 @@ import org.apache.beam.vendor.guava.v26_0_jre.com.google.common.collect.Immutabl
import org.hamcrest.Matcher;
import org.hamcrest.Matchers;
import org.joda.time.DateTime;
+import org.joda.time.DateTimeZone;
+import org.joda.time.ReadableInstant;
import org.junit.Rule;
import org.junit.Test;
import org.junit.experimental.runners.Enclosed;
@@ -93,6 +95,7 @@ public class RowJsonTest {
.addBooleanField("f_boolean")
.addStringField("f_string")
.addDecimalField("f_decimal")
+ .addDateTimeField("f_timestamp")
.build();
String rowString =
@@ -105,7 +108,8 @@ public class RowJsonTest {
+ "\"f_double\" : 62.2,\n"
+ "\"f_boolean\" : true,\n"
+ "\"f_string\" : \"hello\",\n"
- + "\"f_decimal\" : 123.12\n"
+ + "\"f_decimal\" : 123.12,\n"
+ + "\"f_timestamp\" : \"2021-11-18T08:45:38.000Z\"\n"
+ "}";
Row expectedRow =
@@ -119,7 +123,8 @@ public class RowJsonTest {
62.2d,
true,
"hello",
- new BigDecimal("123.12"))
+ new BigDecimal("123.12"),
+ new DateTime(2021, 11, 18, 8, 45, 38, DateTimeZone.UTC).toInstant())
.build();
return new Object[] {"Flat row", schema, rowString, expectedRow};
@@ -325,7 +330,8 @@ public class RowJsonTest {
private static final Double DOUBLE_VALUE = 1.02d;
private static final String DOUBLE_STRING = "1.02";
private static final String DATETIME_STRING = "2014-09-27T20:30:00.450Z";
- private static final DateTime DATETIME_VALUE = DateTime.parse(DATETIME_STRING);
+ private static final ReadableInstant DATETIME_VALUE =
+ DateTime.parse(DATETIME_STRING).toInstant();
@Rule public ExpectedException thrown = ExpectedException.none();