You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pinot.apache.org by ne...@apache.org on 2020/05/12 17:21:23 UTC

[incubator-pinot] branch master updated: Schema method to fetch field spec of time column (#5370)

This is an automated email from the ASF dual-hosted git repository.

nehapawar pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-pinot.git


The following commit(s) were added to refs/heads/master by this push:
     new 7562d4d  Schema method to fetch field spec of time column (#5370)
7562d4d is described below

commit 7562d4db4f9b95f35a86e1d5566dcab2e91378e2
Author: Neha Pawar <ne...@gmail.com>
AuthorDate: Tue May 12 10:21:12 2020 -0700

    Schema method to fetch field spec of time column (#5370)
    
    Introducing method in Schema.getFieldSpecForTimeColumn(String timeColumnName). If, FieldType for time columnName is
    DATE_TIME - return the DateTimeFieldSpec
    TIME - convert to DateTimeFieldSpec before returning
---
 .../org/apache/pinot/common/data/SchemaTest.java   | 47 ++++++++++++++++++----
 .../java/org/apache/pinot/spi/data/Schema.java     | 20 +++++++++
 2 files changed, 59 insertions(+), 8 deletions(-)

diff --git a/pinot-common/src/test/java/org/apache/pinot/common/data/SchemaTest.java b/pinot-common/src/test/java/org/apache/pinot/common/data/SchemaTest.java
index 61413f6..0d5cbcf 100644
--- a/pinot-common/src/test/java/org/apache/pinot/common/data/SchemaTest.java
+++ b/pinot-common/src/test/java/org/apache/pinot/common/data/SchemaTest.java
@@ -84,7 +84,7 @@ public class SchemaTest {
     Assert.assertEquals(dimensionFieldSpec.getFieldType(), FieldSpec.FieldType.DIMENSION);
     Assert.assertEquals(dimensionFieldSpec.getName(), "svDimension");
     Assert.assertEquals(dimensionFieldSpec.getDataType(), FieldSpec.DataType.INT);
-    Assert.assertEquals(dimensionFieldSpec.isSingleValueField(), true);
+    Assert.assertTrue(dimensionFieldSpec.isSingleValueField());
     Assert.assertEquals(dimensionFieldSpec.getDefaultNullValue(), Integer.MIN_VALUE);
 
     dimensionFieldSpec = schema.getDimensionSpec("svDimensionWithDefault");
@@ -92,7 +92,7 @@ public class SchemaTest {
     Assert.assertEquals(dimensionFieldSpec.getFieldType(), FieldSpec.FieldType.DIMENSION);
     Assert.assertEquals(dimensionFieldSpec.getName(), "svDimensionWithDefault");
     Assert.assertEquals(dimensionFieldSpec.getDataType(), FieldSpec.DataType.INT);
-    Assert.assertEquals(dimensionFieldSpec.isSingleValueField(), true);
+    Assert.assertTrue(dimensionFieldSpec.isSingleValueField());
     Assert.assertEquals(dimensionFieldSpec.getDefaultNullValue(), 10);
 
     dimensionFieldSpec = schema.getDimensionSpec("mvDimension");
@@ -100,7 +100,7 @@ public class SchemaTest {
     Assert.assertEquals(dimensionFieldSpec.getFieldType(), FieldSpec.FieldType.DIMENSION);
     Assert.assertEquals(dimensionFieldSpec.getName(), "mvDimension");
     Assert.assertEquals(dimensionFieldSpec.getDataType(), FieldSpec.DataType.STRING);
-    Assert.assertEquals(dimensionFieldSpec.isSingleValueField(), false);
+    Assert.assertFalse(dimensionFieldSpec.isSingleValueField());
     Assert.assertEquals(dimensionFieldSpec.getDefaultNullValue(), "null");
 
     dimensionFieldSpec = schema.getDimensionSpec("mvDimensionWithDefault");
@@ -108,7 +108,7 @@ public class SchemaTest {
     Assert.assertEquals(dimensionFieldSpec.getFieldType(), FieldSpec.FieldType.DIMENSION);
     Assert.assertEquals(dimensionFieldSpec.getName(), "mvDimensionWithDefault");
     Assert.assertEquals(dimensionFieldSpec.getDataType(), FieldSpec.DataType.STRING);
-    Assert.assertEquals(dimensionFieldSpec.isSingleValueField(), false);
+    Assert.assertFalse(dimensionFieldSpec.isSingleValueField());
     Assert.assertEquals(dimensionFieldSpec.getDefaultNullValue(), defaultString);
 
     MetricFieldSpec metricFieldSpec = schema.getMetricSpec("metric");
@@ -116,7 +116,7 @@ public class SchemaTest {
     Assert.assertEquals(metricFieldSpec.getFieldType(), FieldSpec.FieldType.METRIC);
     Assert.assertEquals(metricFieldSpec.getName(), "metric");
     Assert.assertEquals(metricFieldSpec.getDataType(), FieldSpec.DataType.INT);
-    Assert.assertEquals(metricFieldSpec.isSingleValueField(), true);
+    Assert.assertTrue(metricFieldSpec.isSingleValueField());
     Assert.assertEquals(metricFieldSpec.getDefaultNullValue(), 0);
 
     metricFieldSpec = schema.getMetricSpec("metricWithDefault");
@@ -124,7 +124,7 @@ public class SchemaTest {
     Assert.assertEquals(metricFieldSpec.getFieldType(), FieldSpec.FieldType.METRIC);
     Assert.assertEquals(metricFieldSpec.getName(), "metricWithDefault");
     Assert.assertEquals(metricFieldSpec.getDataType(), FieldSpec.DataType.INT);
-    Assert.assertEquals(metricFieldSpec.isSingleValueField(), true);
+    Assert.assertTrue(metricFieldSpec.isSingleValueField());
     Assert.assertEquals(metricFieldSpec.getDefaultNullValue(), 5);
 
     TimeFieldSpec timeFieldSpec = schema.getTimeFieldSpec();
@@ -132,7 +132,7 @@ public class SchemaTest {
     Assert.assertEquals(timeFieldSpec.getFieldType(), FieldSpec.FieldType.TIME);
     Assert.assertEquals(timeFieldSpec.getName(), "time");
     Assert.assertEquals(timeFieldSpec.getDataType(), FieldSpec.DataType.LONG);
-    Assert.assertEquals(timeFieldSpec.isSingleValueField(), true);
+    Assert.assertTrue(timeFieldSpec.isSingleValueField());
     Assert.assertEquals(timeFieldSpec.getDefaultNullValue(), Long.MIN_VALUE);
 
     DateTimeFieldSpec dateTimeFieldSpec = schema.getDateTimeSpec("dateTime");
@@ -140,7 +140,38 @@ public class SchemaTest {
     Assert.assertEquals(dateTimeFieldSpec.getFieldType(), FieldSpec.FieldType.DATE_TIME);
     Assert.assertEquals(dateTimeFieldSpec.getName(), "dateTime");
     Assert.assertEquals(dateTimeFieldSpec.getDataType(), FieldSpec.DataType.LONG);
-    Assert.assertEquals(dateTimeFieldSpec.isSingleValueField(), true);
+    Assert.assertTrue(dateTimeFieldSpec.isSingleValueField());
+    Assert.assertEquals(dateTimeFieldSpec.getDefaultNullValue(), Long.MIN_VALUE);
+    Assert.assertEquals(dateTimeFieldSpec.getFormat(), "1:HOURS:EPOCH");
+    Assert.assertEquals(dateTimeFieldSpec.getGranularity(), "1:HOURS");
+  }
+
+  @Test
+  public void testFetchFieldSpecForTime() {
+    Schema schema = new Schema.SchemaBuilder().addSingleValueDimension("svDimension", FieldSpec.DataType.INT)
+        .addMetric("metric", FieldSpec.DataType.INT)
+        .addTime(new TimeGranularitySpec(FieldSpec.DataType.LONG, TimeUnit.DAYS, "time"), null)
+        .addDateTime("dateTime", FieldSpec.DataType.LONG, "1:HOURS:EPOCH", "1:HOURS").build();
+
+    // Test method which fetches the DateTimeFieldSpec given the timeColumnName
+    // Test is on TIME
+    DateTimeFieldSpec dateTimeFieldSpec = schema.getSpecForTimeColumn("time");
+    Assert.assertNotNull(dateTimeFieldSpec);
+    Assert.assertEquals(dateTimeFieldSpec.getFieldType(), FieldSpec.FieldType.DATE_TIME);
+    Assert.assertEquals(dateTimeFieldSpec.getName(), "time");
+    Assert.assertEquals(dateTimeFieldSpec.getDataType(), FieldSpec.DataType.LONG);
+    Assert.assertTrue(dateTimeFieldSpec.isSingleValueField());
+    Assert.assertEquals(dateTimeFieldSpec.getDefaultNullValue(), Long.MIN_VALUE);
+    Assert.assertEquals(dateTimeFieldSpec.getFormat(), "1:DAYS:EPOCH");
+    Assert.assertEquals(dateTimeFieldSpec.getGranularity(), "1:DAYS");
+
+    // Test it on DATE_TIME
+    dateTimeFieldSpec = schema.getSpecForTimeColumn("dateTime");
+    Assert.assertNotNull(dateTimeFieldSpec);
+    Assert.assertEquals(dateTimeFieldSpec.getFieldType(), FieldSpec.FieldType.DATE_TIME);
+    Assert.assertEquals(dateTimeFieldSpec.getName(), "dateTime");
+    Assert.assertEquals(dateTimeFieldSpec.getDataType(), FieldSpec.DataType.LONG);
+    Assert.assertTrue(dateTimeFieldSpec.isSingleValueField());
     Assert.assertEquals(dateTimeFieldSpec.getDefaultNullValue(), Long.MIN_VALUE);
     Assert.assertEquals(dateTimeFieldSpec.getFormat(), "1:HOURS:EPOCH");
     Assert.assertEquals(dateTimeFieldSpec.getGranularity(), "1:HOURS");
diff --git a/pinot-spi/src/main/java/org/apache/pinot/spi/data/Schema.java b/pinot-spi/src/main/java/org/apache/pinot/spi/data/Schema.java
index 8fb05b3..a3a2b64 100644
--- a/pinot-spi/src/main/java/org/apache/pinot/spi/data/Schema.java
+++ b/pinot-spi/src/main/java/org/apache/pinot/spi/data/Schema.java
@@ -299,6 +299,26 @@ public final class Schema {
     return null;
   }
 
+  /**
+   * Fetches the DateTimeFieldSpec for the given time column name.
+   * If the columnName is a DATE_TIME column, returns the DateTimeFieldSpec
+   * If the columnName is a TIME column, converts to DateTimeFieldSpec before returning
+   */
+  @JsonIgnore
+  @Nullable
+  public DateTimeFieldSpec getSpecForTimeColumn(String timeColumnName) {
+    FieldSpec fieldSpec = _fieldSpecMap.get(timeColumnName);
+    if (fieldSpec != null) {
+      if (fieldSpec.getFieldType() == FieldType.DATE_TIME) {
+        return (DateTimeFieldSpec) fieldSpec;
+      }
+      if (fieldSpec.getFieldType() == FieldType.TIME) {
+        return convertToDateTimeFieldSpec((TimeFieldSpec) fieldSpec);
+      }
+    }
+    return null;
+  }
+
   @JsonIgnore
   public List<String> getDimensionNames() {
     return _dimensionNames;


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@pinot.apache.org
For additional commands, e-mail: commits-help@pinot.apache.org