From 189086c15bd5c39b46b8dc30fa306c6d6242421d Mon Sep 17 00:00:00 2001 From: Luv Agarwal Date: Thu, 20 Feb 2025 13:02:04 +0530 Subject: [PATCH 1/2] Add UUID support in Spanner Schema --- .../org/apache/beam/sdk/io/gcp/spanner/SpannerSchema.java | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/sdks/java/io/google-cloud-platform/src/main/java/org/apache/beam/sdk/io/gcp/spanner/SpannerSchema.java b/sdks/java/io/google-cloud-platform/src/main/java/org/apache/beam/sdk/io/gcp/spanner/SpannerSchema.java index fa44cadeba0a..e851e29c23fb 100644 --- a/sdks/java/io/google-cloud-platform/src/main/java/org/apache/beam/sdk/io/gcp/spanner/SpannerSchema.java +++ b/sdks/java/io/google-cloud-platform/src/main/java/org/apache/beam/sdk/io/gcp/spanner/SpannerSchema.java @@ -181,6 +181,9 @@ private static Type parseSpannerType(String spannerType, Dialect dialect) { if (spannerType.startsWith("STRING")) { return Type.string(); } + if ("UUID".equals(spannerType)) { + return Type.string(); + } if (spannerType.startsWith("BYTES")) { return Type.bytes(); } @@ -260,6 +263,9 @@ private static Type parseSpannerType(String spannerType, Dialect dialect) { if (spannerType.startsWith("JSONB")) { return Type.pgJsonb(); } + if ("UUID".equals(spannerType)) { + return Type.string(); + } throw new IllegalArgumentException("Unknown spanner type " + spannerType); default: throw new IllegalArgumentException("Unrecognized dialect: " + dialect.name()); From 5f296509471cde0f4c61d4caa681366f441c0e6c Mon Sep 17 00:00:00 2001 From: Luv Agarwal Date: Thu, 20 Feb 2025 13:09:03 +0530 Subject: [PATCH 2/2] Add test --- .../apache/beam/sdk/io/gcp/spanner/SpannerSchemaTest.java | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/sdks/java/io/google-cloud-platform/src/test/java/org/apache/beam/sdk/io/gcp/spanner/SpannerSchemaTest.java b/sdks/java/io/google-cloud-platform/src/test/java/org/apache/beam/sdk/io/gcp/spanner/SpannerSchemaTest.java index 1e89326d1e8c..fefe7dc1ef85 100644 --- a/sdks/java/io/google-cloud-platform/src/test/java/org/apache/beam/sdk/io/gcp/spanner/SpannerSchemaTest.java +++ b/sdks/java/io/google-cloud-platform/src/test/java/org/apache/beam/sdk/io/gcp/spanner/SpannerSchemaTest.java @@ -41,10 +41,11 @@ public void testSingleTable() throws Exception { .addColumn("test", "protoVal", "PROTO") .addColumn("test", "enumVal", "ENUM") .addColumn("test", "tokens", "TOKENLIST") + .addColumn("test", "uuidCol", "UUID") .build(); assertEquals(1, schema.getTables().size()); - assertEquals(7, schema.getColumns("test").size()); + assertEquals(8, schema.getColumns("test").size()); assertEquals(1, schema.getKeyParts("test").size()); assertEquals(Type.json(), schema.getColumns("test").get(3).getType()); assertEquals( @@ -52,6 +53,7 @@ public void testSingleTable() throws Exception { assertEquals( Type.protoEnum("customer.app.TestEnum"), schema.getColumns("test").get(5).getType()); assertEquals(Type.bytes(), schema.getColumns("test").get(6).getType()); + assertEquals(Type.string(), schema.getColumns("test").get(7).getType()); } @Test @@ -84,12 +86,14 @@ public void testSinglePgTable() throws Exception { .addColumn("test", "numericVal", "numeric") .addColumn("test", "commitTime", "spanner.commit_timestamp") .addColumn("test", "jsonbCol", "jsonb") + .addColumn("test", "uuidCol", "uuid") .build(); assertEquals(1, schema.getTables().size()); - assertEquals(5, schema.getColumns("test").size()); + assertEquals(6, schema.getColumns("test").size()); assertEquals(1, schema.getKeyParts("test").size()); assertEquals(Type.timestamp(), schema.getColumns("test").get(3).getType()); + assertEquals(Type.string(), schema.getColumns("test").get(5).getType()); } @Test