From 21a6e11795413e5ac1f3e5d8b9991af48c8abbf8 Mon Sep 17 00:00:00 2001 From: Trianz-Akshay <108925344+Trianz-Akshay@users.noreply.github.com> Date: Wed, 31 Jul 2024 18:26:44 +0530 Subject: [PATCH] Handling array values in Neptune node (#2095) --- .../rowwriters/CustomSchemaRowWriter.java | 10 +++++++++- .../propertygraph/rowwriters/VertexRowWriter.java | 12 ++++++++++-- 2 files changed, 19 insertions(+), 3 deletions(-) diff --git a/athena-neptune/src/main/java/com/amazonaws/athena/connectors/neptune/propertygraph/rowwriters/CustomSchemaRowWriter.java b/athena-neptune/src/main/java/com/amazonaws/athena/connectors/neptune/propertygraph/rowwriters/CustomSchemaRowWriter.java index d3093fafce..f03b41cf5d 100644 --- a/athena-neptune/src/main/java/com/amazonaws/athena/connectors/neptune/propertygraph/rowwriters/CustomSchemaRowWriter.java +++ b/athena-neptune/src/main/java/com/amazonaws/athena/connectors/neptune/propertygraph/rowwriters/CustomSchemaRowWriter.java @@ -47,6 +47,7 @@ import java.util.Date; import java.util.Map; import java.util.TreeMap; +import java.util.stream.Collectors; /** * This class is a Utility class to create Extractors for each field type as per @@ -124,7 +125,14 @@ else if (fieldValue instanceof ArrayList) { else if (fieldValue instanceof ArrayList) { ArrayList objValues = (ArrayList) fieldValue; if (objValues != null && objValues.get(0) != null) { - value.value = objValues.get(0).toString(); + if (objValues.size() > 1) { + value.value = String.join(";", objValues.stream() + .map(Object::toString) + .collect(Collectors.toList())); + } + else { + value.value = objValues.get(0).toString(); + } value.isSet = 1; } } diff --git a/athena-neptune/src/main/java/com/amazonaws/athena/connectors/neptune/propertygraph/rowwriters/VertexRowWriter.java b/athena-neptune/src/main/java/com/amazonaws/athena/connectors/neptune/propertygraph/rowwriters/VertexRowWriter.java index 0ec439e1a7..79a0a50579 100644 --- a/athena-neptune/src/main/java/com/amazonaws/athena/connectors/neptune/propertygraph/rowwriters/VertexRowWriter.java +++ b/athena-neptune/src/main/java/com/amazonaws/athena/connectors/neptune/propertygraph/rowwriters/VertexRowWriter.java @@ -45,6 +45,7 @@ import java.util.Date; import java.util.Map; import java.util.TreeMap; +import java.util.stream.Collectors; /** * This class is a Utility class to create Extractors for each field type as per @@ -96,8 +97,15 @@ public static void writeRowTemplate(RowWriterBuilder rowWriterBuilder, Field fie } else { ArrayList objValues = (ArrayList) obj.get(fieldName); - if (objValues != null && objValues.get(0) != null) { - value.value = objValues.get(0).toString(); + if (objValues != null && !objValues.isEmpty()) { + if (objValues.size() > 1) { + value.value = String.join(";", objValues.stream() + .map(Object::toString) + .collect(Collectors.toList())); + } + else { + value.value = objValues.get(0).toString(); + } value.isSet = 1; } }