You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@druid.apache.org by gi...@apache.org on 2019/07/04 23:26:15 UTC

[incubator-druid] branch master updated: optimize single string dimension expression selector (#8014)

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

gian 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 0344a02  optimize single string dimension expression selector (#8014)
0344a02 is described below

commit 0344a020bbb8eb80c52a0e1a07854e8647f6ac2b
Author: Clint Wylie <cw...@apache.org>
AuthorDate: Thu Jul 4 16:26:10 2019 -0700

    optimize single string dimension expression selector (#8014)
    
    * optimize single string dimension expression selector
    
    * more javadoc
    
    * oops
    
    * fix
    
    * fix it
    
    * import
---
 .../SingleStringInputDimensionSelector.java        | 39 ++++------------------
 1 file changed, 7 insertions(+), 32 deletions(-)

diff --git a/processing/src/main/java/org/apache/druid/segment/virtual/SingleStringInputDimensionSelector.java b/processing/src/main/java/org/apache/druid/segment/virtual/SingleStringInputDimensionSelector.java
index fb372dd..d6462b1 100644
--- a/processing/src/main/java/org/apache/druid/segment/virtual/SingleStringInputDimensionSelector.java
+++ b/processing/src/main/java/org/apache/druid/segment/virtual/SingleStringInputDimensionSelector.java
@@ -29,25 +29,18 @@ import org.apache.druid.segment.DimensionSelector;
 import org.apache.druid.segment.DimensionSelectorUtils;
 import org.apache.druid.segment.IdLookup;
 import org.apache.druid.segment.data.IndexedInts;
-import org.apache.druid.segment.data.SingleIndexedInt;
-import org.apache.druid.segment.data.ZeroIndexedInts;
 
 import javax.annotation.Nullable;
 
 /**
- * A DimensionSelector decorator that computes an expression on top of it.
+ * A DimensionSelector decorator that computes an expression on top of it. See {@link ExpressionSelectors} for details
+ * on how expression selectors are constructed.
  */
 public class SingleStringInputDimensionSelector implements DimensionSelector
 {
   private final DimensionSelector selector;
   private final Expr expression;
   private final SingleInputBindings bindings = new SingleInputBindings();
-  private final SingleIndexedInt nullAdjustedRow = new SingleIndexedInt();
-
-  /**
-   * 0 if selector has null as a value; 1 if it doesn't.
-   */
-  private final int nullAdjustment;
 
   public SingleStringInputDimensionSelector(
       final DimensionSelector selector,
@@ -67,7 +60,6 @@ public class SingleStringInputDimensionSelector implements DimensionSelector
 
     this.selector = Preconditions.checkNotNull(selector, "selector");
     this.expression = Preconditions.checkNotNull(expression, "expression");
-    this.nullAdjustment = selector.getValueCardinality() == 0 || selector.lookupName(0) != null ? 1 : 0;
   }
 
   @Override
@@ -78,27 +70,15 @@ public class SingleStringInputDimensionSelector implements DimensionSelector
   }
 
   /**
-   * Treats any non-single-valued row as a row containing a single null value, to ensure consistency with
-   * other expression selectors. See also {@link ExpressionSelectors#supplierFromDimensionSelector} for similar
-   * behavior.
+   * Get the underlying selector {@link IndexedInts} row, or the null adjusted row.
    */
   @Override
   public IndexedInts getRow()
   {
     final IndexedInts row = selector.getRow();
 
-    if (row.size() == 1) {
-      if (nullAdjustment == 0) {
-        return row;
-      } else {
-        nullAdjustedRow.setValue(row.get(0) + nullAdjustment);
-        return nullAdjustedRow;
-      }
-    } else {
-      // Can't handle non-singly-valued rows in expressions.
-      // Treat them as nulls until we think of something better to do.
-      return ZeroIndexedInts.instance();
-    }
+    assert row.size() <= 1;
+    return row;
   }
 
   @Override
@@ -116,7 +96,7 @@ public class SingleStringInputDimensionSelector implements DimensionSelector
   @Override
   public int getValueCardinality()
   {
-    return selector.getValueCardinality() + nullAdjustment;
+    return selector.getValueCardinality();
   }
 
   @Override
@@ -124,12 +104,7 @@ public class SingleStringInputDimensionSelector implements DimensionSelector
   {
     final String value;
 
-    if (id == 0) {
-      // id 0 is always null for this selector impl.
-      value = null;
-    } else {
-      value = selector.lookupName(id - nullAdjustment);
-    }
+    value = selector.lookupName(id);
 
     bindings.set(value);
     return expression.eval(bindings).asString();


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