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