You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@druid.apache.org by hi...@apache.org on 2019/05/16 04:00:08 UTC

[incubator-druid] branch master updated: make ComplexColumn an interface and ExtensionPoint (#7633)

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

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


The following commit(s) were added to refs/heads/master by this push:
     new 8687f42  make ComplexColumn an interface and ExtensionPoint (#7633)
8687f42 is described below

commit 8687f424f98a6570cfb732bf5f1b494366ff3112
Author: Himanshu <g....@gmail.com>
AuthorDate: Wed May 15 20:59:55 2019 -0700

    make ComplexColumn an interface and ExtensionPoint (#7633)
    
    * make ComplexColumn an interface and ExtensionPoint
    
    * incorporate review comments
    
    * make ColumnValueSelector @ExtensionPoint
    
    * more java docs
    
    * add close() method to ComplexColumn interface
---
 .../segment/BaseDoubleColumnValueSelector.java     |  4 +-
 .../segment/BaseFloatColumnValueSelector.java      |  4 +-
 .../druid/segment/BaseLongColumnValueSelector.java |  4 +-
 .../segment/BaseObjectColumnValueSelector.java     |  4 +-
 .../apache/druid/segment/ColumnValueSelector.java  |  4 +-
 .../apache/druid/segment/column/ComplexColumn.java | 71 ++++++++++++----------
 ....java => GenericIndexedBasedComplexColumn.java} | 50 +++++----------
 .../segment/serde/ComplexColumnPartSupplier.java   |  3 +-
 8 files changed, 66 insertions(+), 78 deletions(-)

diff --git a/processing/src/main/java/org/apache/druid/segment/BaseDoubleColumnValueSelector.java b/processing/src/main/java/org/apache/druid/segment/BaseDoubleColumnValueSelector.java
index 42d38ae..8e1b9fc 100644
--- a/processing/src/main/java/org/apache/druid/segment/BaseDoubleColumnValueSelector.java
+++ b/processing/src/main/java/org/apache/druid/segment/BaseDoubleColumnValueSelector.java
@@ -19,7 +19,7 @@
 
 package org.apache.druid.segment;
 
-import org.apache.druid.guice.annotations.PublicApi;
+import org.apache.druid.guice.annotations.ExtensionPoint;
 import org.apache.druid.query.monomorphicprocessing.CalledFromHotLoop;
 import org.apache.druid.query.monomorphicprocessing.HotLoopCallee;
 
@@ -30,7 +30,7 @@ import org.apache.druid.query.monomorphicprocessing.HotLoopCallee;
  *
  * All implementations of this interface MUST also implement {@link ColumnValueSelector}.
  */
-@PublicApi
+@ExtensionPoint
 public interface BaseDoubleColumnValueSelector extends HotLoopCallee, BaseNullableColumnValueSelector
 {
   @CalledFromHotLoop
diff --git a/processing/src/main/java/org/apache/druid/segment/BaseFloatColumnValueSelector.java b/processing/src/main/java/org/apache/druid/segment/BaseFloatColumnValueSelector.java
index bf70346..57c1138 100644
--- a/processing/src/main/java/org/apache/druid/segment/BaseFloatColumnValueSelector.java
+++ b/processing/src/main/java/org/apache/druid/segment/BaseFloatColumnValueSelector.java
@@ -19,7 +19,7 @@
 
 package org.apache.druid.segment;
 
-import org.apache.druid.guice.annotations.PublicApi;
+import org.apache.druid.guice.annotations.ExtensionPoint;
 import org.apache.druid.query.monomorphicprocessing.CalledFromHotLoop;
 import org.apache.druid.query.monomorphicprocessing.HotLoopCallee;
 
@@ -30,7 +30,7 @@ import org.apache.druid.query.monomorphicprocessing.HotLoopCallee;
  *
  * All implementations of this interface MUST also implement {@link ColumnValueSelector}.
  */
-@PublicApi
+@ExtensionPoint
 public interface BaseFloatColumnValueSelector extends HotLoopCallee, BaseNullableColumnValueSelector
 {
   @CalledFromHotLoop
diff --git a/processing/src/main/java/org/apache/druid/segment/BaseLongColumnValueSelector.java b/processing/src/main/java/org/apache/druid/segment/BaseLongColumnValueSelector.java
index 1d95564..73525c7 100644
--- a/processing/src/main/java/org/apache/druid/segment/BaseLongColumnValueSelector.java
+++ b/processing/src/main/java/org/apache/druid/segment/BaseLongColumnValueSelector.java
@@ -19,7 +19,7 @@
 
 package org.apache.druid.segment;
 
-import org.apache.druid.guice.annotations.PublicApi;
+import org.apache.druid.guice.annotations.ExtensionPoint;
 import org.apache.druid.query.monomorphicprocessing.CalledFromHotLoop;
 import org.apache.druid.query.monomorphicprocessing.HotLoopCallee;
 
@@ -30,7 +30,7 @@ import org.apache.druid.query.monomorphicprocessing.HotLoopCallee;
  *
  * All implementations of this interface MUST also implement {@link ColumnValueSelector}.
  */
-@PublicApi
+@ExtensionPoint
 public interface BaseLongColumnValueSelector extends HotLoopCallee, BaseNullableColumnValueSelector
 {
   @CalledFromHotLoop
diff --git a/processing/src/main/java/org/apache/druid/segment/BaseObjectColumnValueSelector.java b/processing/src/main/java/org/apache/druid/segment/BaseObjectColumnValueSelector.java
index 45a399b..859f401 100644
--- a/processing/src/main/java/org/apache/druid/segment/BaseObjectColumnValueSelector.java
+++ b/processing/src/main/java/org/apache/druid/segment/BaseObjectColumnValueSelector.java
@@ -19,7 +19,7 @@
 
 package org.apache.druid.segment;
 
-import org.apache.druid.guice.annotations.PublicApi;
+import org.apache.druid.guice.annotations.ExtensionPoint;
 
 import javax.annotation.Nullable;
 
@@ -30,7 +30,7 @@ import javax.annotation.Nullable;
  *
  * All implementations of this interface MUST also implement {@link ColumnValueSelector}.
  */
-@PublicApi
+@ExtensionPoint
 public interface BaseObjectColumnValueSelector<T> extends BaseNullableColumnValueSelector
 {
   @Nullable
diff --git a/processing/src/main/java/org/apache/druid/segment/ColumnValueSelector.java b/processing/src/main/java/org/apache/druid/segment/ColumnValueSelector.java
index be7a5fd..229cc25 100644
--- a/processing/src/main/java/org/apache/druid/segment/ColumnValueSelector.java
+++ b/processing/src/main/java/org/apache/druid/segment/ColumnValueSelector.java
@@ -19,7 +19,7 @@
 
 package org.apache.druid.segment;
 
-import org.apache.druid.guice.annotations.PublicApi;
+import org.apache.druid.guice.annotations.ExtensionPoint;
 
 /**
  * Base type for interfaces that manage column value selection, e.g. {@link DimensionSelector}, {@link
@@ -33,7 +33,7 @@ import org.apache.druid.guice.annotations.PublicApi;
  * methods and null from {@link #getObject()}, should always be an instance of {@link NilColumnValueSelector}.
  * `selector instanceof NilColumnValueSelector` is the recommended way to check for this condition.
  */
-@PublicApi
+@ExtensionPoint
 public interface ColumnValueSelector<T> extends BaseLongColumnValueSelector, BaseDoubleColumnValueSelector,
     BaseFloatColumnValueSelector, BaseObjectColumnValueSelector<T>
 {
diff --git a/processing/src/main/java/org/apache/druid/segment/column/ComplexColumn.java b/processing/src/main/java/org/apache/druid/segment/column/ComplexColumn.java
index 1a7981e..acdfcd6 100644
--- a/processing/src/main/java/org/apache/druid/segment/column/ComplexColumn.java
+++ b/processing/src/main/java/org/apache/druid/segment/column/ComplexColumn.java
@@ -19,45 +19,60 @@
 
 package org.apache.druid.segment.column;
 
+import org.apache.druid.guice.annotations.ExtensionPoint;
 import org.apache.druid.query.monomorphicprocessing.RuntimeShapeInspector;
 import org.apache.druid.segment.ColumnValueSelector;
 import org.apache.druid.segment.ObjectColumnSelector;
-import org.apache.druid.segment.data.GenericIndexed;
 import org.apache.druid.segment.data.ReadableOffset;
 
 import javax.annotation.Nullable;
 
 /**
-*/
-public class ComplexColumn implements BaseColumn
+ * This interface represents a complex column and can be implemented by druid extension writer of a custom column
+ * with arbitrary serialization instead of a custom column that serializes rows of objects serialized using
+ * {@link org.apache.druid.segment.data.GenericIndexed} class which is default implementation of "writeToXXX" methods in
+ * {@link org.apache.druid.segment.serde.ComplexColumnSerializer}. In that case {@link GenericIndexedBasedComplexColumn}
+ * should be used.
+ */
+@ExtensionPoint
+public interface ComplexColumn extends BaseColumn
 {
-  private final GenericIndexed<?> index;
-  private final String typeName;
+  /**
+   * @return Class of objects returned on calls to {@link ComplexColumn#getRowValue(int)} .
+   */
+  Class<?> getClazz();
 
-  public ComplexColumn(String typeName, GenericIndexed<?> index)
-  {
-    this.index = index;
-    this.typeName = typeName;
-  }
+  /**
+   * @return Typename associated with this column.
+   */
+  String getTypeName();
 
-  public String getTypeName()
-  {
-    return typeName;
-  }
+  /**
+   * Return rows in the column.
+   * @param rowNum the row number
+   * @return row object of type same as {@link ComplexColumn#getClazz()}  } at row number "rowNum" .
+   */
+  Object getRowValue(int rowNum);
 
-  @Nullable
-  public Object getRowValue(int rowNum)
-  {
-    return index.get(rowNum);
-  }
+  /**
+   * @return serialized size (in bytes) of this column.
+   */
+  int getLength();
 
-  public int getLength()
-  {
-    return index.size();
-  }
+  /**
+   * Close and release any resources associated with this column.
+   */
+  @Override
+  void close();
 
+  /**
+   * Optionally overridden when complex column serialization is not based on default serialization based
+   * on {@link org.apache.druid.segment.data.GenericIndexed} in {@link org.apache.druid.segment.serde.ComplexColumnSerializer}.
+   * @param offset object to retrieve row number
+   * @return the {@link ColumnValueSelector} object
+   */
   @Override
-  public ColumnValueSelector<?> makeColumnValueSelector(ReadableOffset offset)
+  default ColumnValueSelector<?> makeColumnValueSelector(ReadableOffset offset)
   {
     return new ObjectColumnSelector()
     {
@@ -71,7 +86,7 @@ public class ComplexColumn implements BaseColumn
       @Override
       public Class classOfObject()
       {
-        return index.getClazz();
+        return getClazz();
       }
 
       @Override
@@ -81,10 +96,4 @@ public class ComplexColumn implements BaseColumn
       }
     };
   }
-
-  @Override
-  public void close()
-  {
-    // nothing to close
-  }
 }
diff --git a/processing/src/main/java/org/apache/druid/segment/column/ComplexColumn.java b/processing/src/main/java/org/apache/druid/segment/column/GenericIndexedBasedComplexColumn.java
similarity index 58%
copy from processing/src/main/java/org/apache/druid/segment/column/ComplexColumn.java
copy to processing/src/main/java/org/apache/druid/segment/column/GenericIndexedBasedComplexColumn.java
index 1a7981e..f3ec134 100644
--- a/processing/src/main/java/org/apache/druid/segment/column/ComplexColumn.java
+++ b/processing/src/main/java/org/apache/druid/segment/column/GenericIndexedBasedComplexColumn.java
@@ -19,72 +19,50 @@
 
 package org.apache.druid.segment.column;
 
-import org.apache.druid.query.monomorphicprocessing.RuntimeShapeInspector;
-import org.apache.druid.segment.ColumnValueSelector;
-import org.apache.druid.segment.ObjectColumnSelector;
 import org.apache.druid.segment.data.GenericIndexed;
-import org.apache.druid.segment.data.ReadableOffset;
-
-import javax.annotation.Nullable;
 
 /**
+ * Implementation of {@link ComplexColumn} to be used when complex column serialization is done by using
+ * {@link GenericIndexed} by using default implementations of "writeToXXX" methods in
+ * {@link org.apache.druid.segment.serde.ComplexColumnSerializer}
 */
-public class ComplexColumn implements BaseColumn
+public class GenericIndexedBasedComplexColumn implements ComplexColumn
 {
   private final GenericIndexed<?> index;
   private final String typeName;
 
-  public ComplexColumn(String typeName, GenericIndexed<?> index)
+  public GenericIndexedBasedComplexColumn(String typeName, GenericIndexed<?> index)
   {
     this.index = index;
     this.typeName = typeName;
   }
 
+  @Override
+  public Class<?> getClazz()
+  {
+    return index.getClazz();
+  }
+
+  @Override
   public String getTypeName()
   {
     return typeName;
   }
 
-  @Nullable
+  @Override
   public Object getRowValue(int rowNum)
   {
     return index.get(rowNum);
   }
 
+  @Override
   public int getLength()
   {
     return index.size();
   }
 
   @Override
-  public ColumnValueSelector<?> makeColumnValueSelector(ReadableOffset offset)
-  {
-    return new ObjectColumnSelector()
-    {
-      @Nullable
-      @Override
-      public Object getObject()
-      {
-        return getRowValue(offset.getOffset());
-      }
-
-      @Override
-      public Class classOfObject()
-      {
-        return index.getClazz();
-      }
-
-      @Override
-      public void inspectRuntimeShape(RuntimeShapeInspector inspector)
-      {
-        inspector.visit("column", ComplexColumn.this);
-      }
-    };
-  }
-
-  @Override
   public void close()
   {
-    // nothing to close
   }
 }
diff --git a/processing/src/main/java/org/apache/druid/segment/serde/ComplexColumnPartSupplier.java b/processing/src/main/java/org/apache/druid/segment/serde/ComplexColumnPartSupplier.java
index 9ef7ce5..d8988e1 100644
--- a/processing/src/main/java/org/apache/druid/segment/serde/ComplexColumnPartSupplier.java
+++ b/processing/src/main/java/org/apache/druid/segment/serde/ComplexColumnPartSupplier.java
@@ -21,6 +21,7 @@ package org.apache.druid.segment.serde;
 
 import com.google.common.base.Supplier;
 import org.apache.druid.segment.column.ComplexColumn;
+import org.apache.druid.segment.column.GenericIndexedBasedComplexColumn;
 import org.apache.druid.segment.data.GenericIndexed;
 
 /**
@@ -39,6 +40,6 @@ public class ComplexColumnPartSupplier implements Supplier<ComplexColumn>
   @Override
   public ComplexColumn get()
   {
-    return new ComplexColumn(typeName, complexType);
+    return new GenericIndexedBasedComplexColumn(typeName, complexType);
   }
 }


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