This is an automated email from the ASF dual-hosted git repository.
jackie pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/pinot.git
The following commit(s) were added to refs/heads/master by this push:
new b02df18a51 Adding ComplexType in SchemaInfo to render Complex Column
count in UI. (#14254)
b02df18a51 is described below
commit b02df18a519ed447932f251379d2997331203342
Author: RAGHVENDRA KUMAR YADAV <[email protected]>
AuthorDate: Fri Oct 18 15:55:00 2024 -0700
Adding ComplexType in SchemaInfo to render Complex Column count in UI.
(#14254)
---
.../java/org/apache/pinot/spi/data/SchemaInfo.java | 8 ++++
.../org/apache/pinot/spi/data/SchemaInfoTest.java | 53 ++++++++++++++++++++++
2 files changed, 61 insertions(+)
diff --git a/pinot-spi/src/main/java/org/apache/pinot/spi/data/SchemaInfo.java
b/pinot-spi/src/main/java/org/apache/pinot/spi/data/SchemaInfo.java
index 5949fcdcad..9433879340 100644
--- a/pinot-spi/src/main/java/org/apache/pinot/spi/data/SchemaInfo.java
+++ b/pinot-spi/src/main/java/org/apache/pinot/spi/data/SchemaInfo.java
@@ -40,6 +40,9 @@ public class SchemaInfo {
@JsonProperty("numMetricFields")
private int _numMetricFields;
+ @JsonProperty("numComplexFields")
+ private int _numComplexFields;
+
public String getSchemaName() {
return _schemaName;
}
@@ -56,6 +59,10 @@ public class SchemaInfo {
return _numMetricFields;
}
+ public int getNumComplexFields() {
+ return _numComplexFields;
+ }
+
public SchemaInfo() {
}
@@ -66,5 +73,6 @@ public class SchemaInfo {
_numDimensionFields = schema.getDimensionFieldSpecs().size() - 3;
_numDateTimeFields = schema.getDateTimeFieldSpecs().size();
_numMetricFields = schema.getMetricFieldSpecs().size();
+ _numComplexFields = schema.getComplexFieldSpecs().size();
}
}
diff --git
a/pinot-spi/src/test/java/org/apache/pinot/spi/data/SchemaInfoTest.java
b/pinot-spi/src/test/java/org/apache/pinot/spi/data/SchemaInfoTest.java
index 5f31e19ed8..d3ee0e31ae 100644
--- a/pinot-spi/src/test/java/org/apache/pinot/spi/data/SchemaInfoTest.java
+++ b/pinot-spi/src/test/java/org/apache/pinot/spi/data/SchemaInfoTest.java
@@ -23,6 +23,7 @@ import com.fasterxml.jackson.databind.JsonNode;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
+import java.util.Map;
import org.apache.pinot.spi.utils.CommonConstants;
import org.apache.pinot.spi.utils.JsonUtils;
import org.testng.annotations.Test;
@@ -57,6 +58,7 @@ public class SchemaInfoTest {
assertEquals(jsonNodeResp.get(0).get("numDimensionFields").asInt(), 3);
assertEquals(jsonNodeResp.get(0).get("numDateTimeFields").asInt(), 2);
assertEquals(jsonNodeResp.get(0).get("numMetricFields").asInt(), 1);
+ assertEquals(jsonNodeResp.get(0).get("numComplexFields").asInt(), 0);
assertEquals(schemaInfo.getSchemaName(), "TestSchema");
// Test column count
@@ -74,5 +76,56 @@ public class SchemaInfoTest {
assertEquals(schemaInfo1.getNumDimensionFields(), 3);
assertEquals(schemaInfo1.getNumDateTimeFields(), 2);
assertEquals(schemaInfo1.getNumMetricFields(), 1);
+ assertEquals(schemaInfo1.getNumComplexFields(), 0);
+ }
+
+ @Test
+ public void testSchemaInfoSerDeserWithComplexAndVirtualColumns()
+ throws IOException {
+ // Mock the Schema objects
+ Schema schemaMock =
+ new
Schema.SchemaBuilder().setSchemaName("TestSchema").addDimensionField("dim1",
FieldSpec.DataType.STRING)
+ .addDimensionField("dim2",
FieldSpec.DataType.INT).addDimensionField("dim3", FieldSpec.DataType.INT)
+
.addDimensionField(CommonConstants.Segment.BuiltInVirtualColumn.DOCID,
FieldSpec.DataType.INT)
+
.addDimensionField(CommonConstants.Segment.BuiltInVirtualColumn.HOSTNAME,
FieldSpec.DataType.STRING)
+
.addDimensionField(CommonConstants.Segment.BuiltInVirtualColumn.SEGMENTNAME,
FieldSpec.DataType.STRING)
+ .addDateTimeField("dt1", FieldSpec.DataType.LONG, "1:HOURS:EPOCH",
"1:HOURS")
+ .addDateTimeField("dt2", FieldSpec.DataType.LONG, "1:HOURS:EPOCH",
"1:HOURS").addMetricField("metric", INT)
+ .addComplex("intMap", FieldSpec.DataType.MAP,
+ Map.of("key", new DimensionFieldSpec("key",
FieldSpec.DataType.STRING, true), "value",
+ new DimensionFieldSpec("value", FieldSpec.DataType.INT,
true)))
+ .addComplex("stringMap", FieldSpec.DataType.MAP,
+ Map.of("key", new DimensionFieldSpec("key",
FieldSpec.DataType.STRING, true), "value",
+ new DimensionFieldSpec("value", FieldSpec.DataType.STRING,
true))).build();
+ SchemaInfo schemaInfo = new SchemaInfo(schemaMock);
+ List<SchemaInfo> schemaInfoList = new ArrayList<>();
+ schemaInfoList.add(schemaInfo);
+ String response = JsonUtils.objectToPrettyString(schemaInfoList);
+ JsonNode jsonNodeResp = JsonUtils.stringToJsonNode(response);
+
+ // Test deserialization
+ assertEquals(jsonNodeResp.get(0).get("schemaName").asText(), "TestSchema");
+ assertEquals(jsonNodeResp.get(0).get("numDimensionFields").asInt(), 3);
+ assertEquals(jsonNodeResp.get(0).get("numDateTimeFields").asInt(), 2);
+ assertEquals(jsonNodeResp.get(0).get("numMetricFields").asInt(), 1);
+ assertEquals(jsonNodeResp.get(0).get("numComplexFields").asInt(), 2);
+ assertEquals(schemaInfo.getSchemaName(), "TestSchema");
+
+ // Test column count
+ assertEquals(schemaInfo.getNumDimensionFields(), 3); // 6 - 3 virtual
columns = 3
+ assertEquals(schemaInfo.getNumDateTimeFields(), 2);
+ assertEquals(schemaInfo.getNumMetricFields(), 1);
+
+ // Serialize JsonNode back to SchemaInfo
+ List<SchemaInfo> schemaInfoListSer = new ArrayList<>();
+ schemaInfoListSer = JsonUtils.jsonNodeToObject(jsonNodeResp, new
TypeReference<List<SchemaInfo>>() {
+ });
+ SchemaInfo schemaInfo1 = schemaInfoListSer.get(0);
+ // Verify the deserialized object match
+ assertEquals(schemaInfo1.getSchemaName(), "TestSchema");
+ assertEquals(schemaInfo1.getNumDimensionFields(), 3);
+ assertEquals(schemaInfo1.getNumDateTimeFields(), 2);
+ assertEquals(schemaInfo1.getNumMetricFields(), 1);
+ assertEquals(schemaInfo1.getNumComplexFields(), 2);
}
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]