diff options
author | Aman Sinha <asinha@maprtech.com> | 2018-10-13 23:38:17 -0700 |
---|---|---|
committer | Aman Sinha <asinha@maprtech.com> | 2018-10-25 16:08:51 -0700 |
commit | 7571d52eab9b961687df7d4fb845d0a297b228bb (patch) | |
tree | 93c8a2de552c3a90051d523ad26291aacc02d1ef /contrib/format-maprdb/src/main/java/org/apache/drill/exec/store/mapr | |
parent | 387bc4fefc40b645685439fd1da43f7223e5933c (diff) |
DRILL-6381: Address code review comments (part 3).
DRILL-6381: Add missing joinControl logic for INTERSECT_DISTINCT.
- Modified HashJoin's probe phase to process INTERSECT_DISTINCT.
- NOTE: For build phase, the functionality will be same as for SemiJoin when it is added later.
DRILL-6381: Address code review comment for intersect_distinct.
DRILL-6381: Rebase on latest master and fix compilation issues.
DRILL-6381: Generate protobuf files for C++ native client.
DRILL-6381: Use shaded Guava classes. Add more comments and Javadoc.
Diffstat (limited to 'contrib/format-maprdb/src/main/java/org/apache/drill/exec/store/mapr')
9 files changed, 41 insertions, 38 deletions
diff --git a/contrib/format-maprdb/src/main/java/org/apache/drill/exec/store/mapr/PluginConstants.java b/contrib/format-maprdb/src/main/java/org/apache/drill/exec/store/mapr/PluginConstants.java index 4239c5df1..7a175a289 100644 --- a/contrib/format-maprdb/src/main/java/org/apache/drill/exec/store/mapr/PluginConstants.java +++ b/contrib/format-maprdb/src/main/java/org/apache/drill/exec/store/mapr/PluginConstants.java @@ -53,6 +53,9 @@ public class PluginConstants { public static final int JSON_TABLE_NUM_TABLETS_PER_INDEX_DEFAULT = 32; + public static final int JSON_TABLE_SCAN_SIZE_MB_MIN = 32; + public static final int JSON_TABLE_SCAN_SIZE_MB_MAX = 8192; + public static final String JSON_TABLE_SCAN_SIZE_MB = "format-maprdb.json.scanSizeMB"; public static final int JSON_TABLE_SCAN_SIZE_MB_DEFAULT = 128; diff --git a/contrib/format-maprdb/src/main/java/org/apache/drill/exec/store/mapr/db/MapRDBFormatPlugin.java b/contrib/format-maprdb/src/main/java/org/apache/drill/exec/store/mapr/db/MapRDBFormatPlugin.java index 0d1bf04c6..fc8a0576c 100644 --- a/contrib/format-maprdb/src/main/java/org/apache/drill/exec/store/mapr/db/MapRDBFormatPlugin.java +++ b/contrib/format-maprdb/src/main/java/org/apache/drill/exec/store/mapr/db/MapRDBFormatPlugin.java @@ -66,13 +66,15 @@ public class MapRDBFormatPlugin extends TableFormatPlugin { connection = ConnectionFactory.createConnection(hbaseConf); jsonTableCache = new MapRDBTableCache(context.getConfig()); int scanRangeSizeMBConfig = context.getConfig().getInt(PluginConstants.JSON_TABLE_SCAN_SIZE_MB); - if (scanRangeSizeMBConfig < 32 || scanRangeSizeMBConfig > 8192) { + if (scanRangeSizeMBConfig < PluginConstants.JSON_TABLE_SCAN_SIZE_MB_MIN || + scanRangeSizeMBConfig > PluginConstants.JSON_TABLE_SCAN_SIZE_MB_MAX) { logger.warn("Invalid scan size {} for MapR-DB tables, using default", scanRangeSizeMBConfig); scanRangeSizeMBConfig = PluginConstants.JSON_TABLE_SCAN_SIZE_MB_DEFAULT; } int restrictedScanRangeSizeMBConfig = context.getConfig().getInt(PluginConstants.JSON_TABLE_RESTRICTED_SCAN_SIZE_MB); - if (restrictedScanRangeSizeMBConfig < 32 || restrictedScanRangeSizeMBConfig > 8192) { + if (restrictedScanRangeSizeMBConfig < PluginConstants.JSON_TABLE_SCAN_SIZE_MB_MIN || + restrictedScanRangeSizeMBConfig > PluginConstants.JSON_TABLE_SCAN_SIZE_MB_MAX) { logger.warn("Invalid restricted scan size {} for MapR-DB tables, using default", restrictedScanRangeSizeMBConfig); restrictedScanRangeSizeMBConfig = PluginConstants.JSON_TABLE_RESTRICTED_SCAN_SIZE_MB_DEFAULT; } diff --git a/contrib/format-maprdb/src/main/java/org/apache/drill/exec/store/mapr/db/MapRDBPushFilterIntoScan.java b/contrib/format-maprdb/src/main/java/org/apache/drill/exec/store/mapr/db/MapRDBPushFilterIntoScan.java index 511a111d6..a0f5536ca 100644 --- a/contrib/format-maprdb/src/main/java/org/apache/drill/exec/store/mapr/db/MapRDBPushFilterIntoScan.java +++ b/contrib/format-maprdb/src/main/java/org/apache/drill/exec/store/mapr/db/MapRDBPushFilterIntoScan.java @@ -51,8 +51,9 @@ public abstract class MapRDBPushFilterIntoScan extends StoragePluginOptimizerRul @Override public void onMatch(RelOptRuleCall call) { - final ScanPrel scan = (ScanPrel) call.rel(1); - final FilterPrel filter = (FilterPrel) call.rel(0); + final FilterPrel filter = call.rel(0); + final ScanPrel scan = call.rel(1); + final RexNode condition = filter.getCondition(); if (scan.getGroupScan() instanceof BinaryTableGroupScan) { @@ -80,9 +81,9 @@ public abstract class MapRDBPushFilterIntoScan extends StoragePluginOptimizerRul @Override public void onMatch(RelOptRuleCall call) { - final ScanPrel scan = (ScanPrel) call.rel(2); - final ProjectPrel project = (ProjectPrel) call.rel(1); - final FilterPrel filter = (FilterPrel) call.rel(0); + final FilterPrel filter = call.rel(0); + final ProjectPrel project = call.rel(1); + final ScanPrel scan = call.rel(2); // convert the filter to one that references the child of the project final RexNode condition = RelOptUtil.pushPastProject(filter.getCondition(), project); @@ -134,13 +135,13 @@ public abstract class MapRDBPushFilterIntoScan extends StoragePluginOptimizerRul final JsonConditionBuilder jsonConditionBuilder = new JsonConditionBuilder(groupScan, conditionExp); final JsonScanSpec newScanSpec = jsonConditionBuilder.parseTree(); if (newScanSpec == null) { - return; //no filter pushdown ==> No transformation. + return; // no filter pushdown ==> No transformation. } final JsonTableGroupScan newGroupsScan = (JsonTableGroupScan) groupScan.clone(newScanSpec); newGroupsScan.setFilterPushedDown(true); - final ScanPrel newScanPrel = new ScanPrel(scan, filter.getTraitSet(), newGroupsScan, scan.getRowType(), scan.getTable()); + final ScanPrel newScanPrel = new ScanPrel(scan.getCluster(), filter.getTraitSet(), newGroupsScan, scan.getRowType(), scan.getTable()); // Depending on whether is a project in the middle, assign either scan or copy of project to childRel. final RelNode childRel = project == null ? newScanPrel : project.copy(project.getTraitSet(), ImmutableList.of((RelNode)newScanPrel)); @@ -186,7 +187,7 @@ public abstract class MapRDBPushFilterIntoScan extends StoragePluginOptimizerRul groupScan.getTableStats()); newGroupsScan.setFilterPushedDown(true); - final ScanPrel newScanPrel = new ScanPrel(scan, filter.getTraitSet(), newGroupsScan, scan.getRowType(), scan.getTable()); + final ScanPrel newScanPrel = new ScanPrel(scan.getCluster(), filter.getTraitSet(), newGroupsScan, scan.getRowType(), scan.getTable()); // Depending on whether is a project in the middle, assign either scan or copy of project to childRel. final RelNode childRel = project == null ? newScanPrel : project.copy(project.getTraitSet(), ImmutableList.of((RelNode)newScanPrel));; diff --git a/contrib/format-maprdb/src/main/java/org/apache/drill/exec/store/mapr/db/MapRDBPushLimitIntoScan.java b/contrib/format-maprdb/src/main/java/org/apache/drill/exec/store/mapr/db/MapRDBPushLimitIntoScan.java index a26bc808c..28d59d04a 100644 --- a/contrib/format-maprdb/src/main/java/org/apache/drill/exec/store/mapr/db/MapRDBPushLimitIntoScan.java +++ b/contrib/format-maprdb/src/main/java/org/apache/drill/exec/store/mapr/db/MapRDBPushLimitIntoScan.java @@ -47,8 +47,8 @@ public abstract class MapRDBPushLimitIntoScan extends StoragePluginOptimizerRule @Override public void onMatch(RelOptRuleCall call) { - final ScanPrel scan = call.rel(1); final LimitPrel limit = call.rel(0); + final ScanPrel scan = call.rel(1); doPushLimitIntoGroupScan(call, limit, null, scan, scan.getGroupScan()); } diff --git a/contrib/format-maprdb/src/main/java/org/apache/drill/exec/store/mapr/db/MapRDBPushProjectIntoScan.java b/contrib/format-maprdb/src/main/java/org/apache/drill/exec/store/mapr/db/MapRDBPushProjectIntoScan.java index 521586808..d8d0a2c41 100644 --- a/contrib/format-maprdb/src/main/java/org/apache/drill/exec/store/mapr/db/MapRDBPushProjectIntoScan.java +++ b/contrib/format-maprdb/src/main/java/org/apache/drill/exec/store/mapr/db/MapRDBPushProjectIntoScan.java @@ -17,7 +17,7 @@ */ package org.apache.drill.exec.store.mapr.db; -import com.google.common.collect.Lists; +import org.apache.drill.shaded.guava.com.google.common.collect.Lists; import org.apache.calcite.plan.RelOptRuleCall; import org.apache.calcite.plan.RelOptRuleOperand; import org.apache.calcite.plan.RelTrait; @@ -30,18 +30,21 @@ import org.apache.calcite.rex.RexNode; import org.apache.drill.common.exceptions.DrillRuntimeException; import org.apache.drill.exec.planner.common.DrillRelOptUtil; import org.apache.drill.exec.planner.logical.RelOptHelper; -import org.apache.drill.exec.planner.common.DrillRelOptUtil; -import org.apache.drill.exec.planner.common.DrillRelOptUtil.ProjectPushInfo; import org.apache.drill.exec.planner.physical.Prel; import org.apache.drill.exec.planner.physical.ProjectPrel; import org.apache.drill.exec.planner.physical.ScanPrel; import org.apache.drill.exec.store.StoragePluginOptimizerRule; -import org.apache.drill.exec.store.mapr.db.binary.BinaryTableGroupScan; import org.apache.drill.exec.store.mapr.db.json.JsonTableGroupScan; import org.apache.drill.exec.util.Utilities; import java.util.List; +/** + * Push a physical Project into Scan. Currently, this rule is only doing projection pushdown for MapRDB-JSON tables + * since it was needed for the secondary index feature which only applies to Json tables. + * For binary tables, note that the DrillPushProjectIntoScanRule is still applicable during the logical + * planning phase. + */ public abstract class MapRDBPushProjectIntoScan extends StoragePluginOptimizerRule { static final org.slf4j.Logger logger = org.slf4j.LoggerFactory.getLogger(MapRDBPushProjectIntoScan.class); @@ -53,17 +56,10 @@ public abstract class MapRDBPushProjectIntoScan extends StoragePluginOptimizerRu RelOptHelper.some(ProjectPrel.class, RelOptHelper.any(ScanPrel.class)), "MapRDBPushProjIntoScan:Proj_On_Scan") { @Override public void onMatch(RelOptRuleCall call) { - final ScanPrel scan = (ScanPrel) call.rel(1); - final ProjectPrel project = (ProjectPrel) call.rel(0); - if (!(scan.getGroupScan() instanceof MapRDBGroupScan)) { - return; - } - doPushProjectIntoGroupScan(call, project, scan, (MapRDBGroupScan) scan.getGroupScan()); - if (scan.getGroupScan() instanceof BinaryTableGroupScan) { - BinaryTableGroupScan groupScan = (BinaryTableGroupScan) scan.getGroupScan(); + final ProjectPrel project = call.rel(0); + final ScanPrel scan = call.rel(1); - } else { - assert (scan.getGroupScan() instanceof JsonTableGroupScan); + if (scan.getGroupScan() instanceof JsonTableGroupScan) { JsonTableGroupScan groupScan = (JsonTableGroupScan) scan.getGroupScan(); doPushProjectIntoGroupScan(call, project, scan, groupScan); @@ -72,9 +68,10 @@ public abstract class MapRDBPushProjectIntoScan extends StoragePluginOptimizerRu @Override public boolean matches(RelOptRuleCall call) { - final ScanPrel scan = (ScanPrel) call.rel(1); - if (scan.getGroupScan() instanceof BinaryTableGroupScan || - scan.getGroupScan() instanceof JsonTableGroupScan) { + final ScanPrel scan = call.rel(1); + + // See class level comments above for why only JsonGroupScan is considered + if (scan.getGroupScan() instanceof JsonTableGroupScan) { return super.matches(call); } return false; @@ -82,12 +79,12 @@ public abstract class MapRDBPushProjectIntoScan extends StoragePluginOptimizerRu }; protected void doPushProjectIntoGroupScan(RelOptRuleCall call, - ProjectPrel project, ScanPrel scan, MapRDBGroupScan groupScan) { + ProjectPrel project, ScanPrel scan, JsonTableGroupScan groupScan) { try { DrillRelOptUtil.ProjectPushInfo columnInfo = DrillRelOptUtil.getFieldsInformation(scan.getRowType(), project.getProjects()); - if (columnInfo == null || Utilities.isStarQuery(columnInfo.getFields()) // + if (columnInfo == null || Utilities.isStarQuery(columnInfo.getFields()) || !groupScan.canPushdownProjects(columnInfo.getFields())) { return; } diff --git a/contrib/format-maprdb/src/main/java/org/apache/drill/exec/store/mapr/db/MapRDBRestrictedScanBatchCreator.java b/contrib/format-maprdb/src/main/java/org/apache/drill/exec/store/mapr/db/MapRDBRestrictedScanBatchCreator.java index 89ce95d5d..cb3732a0d 100644 --- a/contrib/format-maprdb/src/main/java/org/apache/drill/exec/store/mapr/db/MapRDBRestrictedScanBatchCreator.java +++ b/contrib/format-maprdb/src/main/java/org/apache/drill/exec/store/mapr/db/MapRDBRestrictedScanBatchCreator.java @@ -17,8 +17,8 @@ */ package org.apache.drill.exec.store.mapr.db; -import com.google.common.base.Preconditions; -import com.google.common.collect.Lists; +import org.apache.drill.shaded.guava.com.google.common.base.Preconditions; +import org.apache.drill.shaded.guava.com.google.common.collect.Lists; import org.apache.drill.common.exceptions.ExecutionSetupException; import org.apache.drill.exec.ops.ExecutorFragmentContext; import org.apache.drill.exec.physical.impl.BatchCreator; diff --git a/contrib/format-maprdb/src/main/java/org/apache/drill/exec/store/mapr/db/json/JsonTableRangePartitionFunction.java b/contrib/format-maprdb/src/main/java/org/apache/drill/exec/store/mapr/db/json/JsonTableRangePartitionFunction.java index c0b73ee53..ca508ca8c 100644 --- a/contrib/format-maprdb/src/main/java/org/apache/drill/exec/store/mapr/db/json/JsonTableRangePartitionFunction.java +++ b/contrib/format-maprdb/src/main/java/org/apache/drill/exec/store/mapr/db/json/JsonTableRangePartitionFunction.java @@ -30,8 +30,8 @@ import com.fasterxml.jackson.annotation.JsonCreator; import com.fasterxml.jackson.annotation.JsonIgnore; import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.annotation.JsonTypeName; -import com.google.common.base.Preconditions; -import com.google.common.collect.Lists; +import org.apache.drill.shaded.guava.com.google.common.base.Preconditions; +import org.apache.drill.shaded.guava.com.google.common.collect.Lists; import com.mapr.db.Table; import com.mapr.db.impl.ConditionImpl; import com.mapr.db.impl.IdCodec; diff --git a/contrib/format-maprdb/src/main/java/org/apache/drill/exec/store/mapr/db/json/MaprDBJsonRecordReader.java b/contrib/format-maprdb/src/main/java/org/apache/drill/exec/store/mapr/db/json/MaprDBJsonRecordReader.java index 63a938106..0be44e84b 100644 --- a/contrib/format-maprdb/src/main/java/org/apache/drill/exec/store/mapr/db/json/MaprDBJsonRecordReader.java +++ b/contrib/format-maprdb/src/main/java/org/apache/drill/exec/store/mapr/db/json/MaprDBJsonRecordReader.java @@ -236,7 +236,7 @@ public class MaprDBJsonRecordReader extends AbstractRecordReader { idOnly = (scannedFields == null); } - if(projectWholeDocument) { + if (projectWholeDocument) { projector = new FieldProjector(projectedFieldsSet); } diff --git a/contrib/format-maprdb/src/main/java/org/apache/drill/exec/store/mapr/db/json/RestrictedJsonTableGroupScan.java b/contrib/format-maprdb/src/main/java/org/apache/drill/exec/store/mapr/db/json/RestrictedJsonTableGroupScan.java index 2f06d0075..055c5a51a 100644 --- a/contrib/format-maprdb/src/main/java/org/apache/drill/exec/store/mapr/db/json/RestrictedJsonTableGroupScan.java +++ b/contrib/format-maprdb/src/main/java/org/apache/drill/exec/store/mapr/db/json/RestrictedJsonTableGroupScan.java @@ -24,8 +24,8 @@ import com.fasterxml.jackson.annotation.JsonCreator; import com.fasterxml.jackson.annotation.JsonIgnore; import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.annotation.JsonTypeName; -import com.google.common.base.Preconditions; -import com.google.common.collect.Lists; +import org.apache.drill.shaded.guava.com.google.common.base.Preconditions; +import org.apache.drill.shaded.guava.com.google.common.collect.Lists; import org.apache.drill.common.expression.SchemaPath; import org.apache.drill.exec.physical.base.GroupScan; @@ -57,7 +57,7 @@ public class RestrictedJsonTableGroupScan extends JsonTableGroupScan { @JsonProperty("format") MapRDBFormatPlugin formatPlugin, @JsonProperty("scanSpec") JsonScanSpec scanSpec, /* scan spec of the original table */ @JsonProperty("columns") List<SchemaPath> columns, - @JsonProperty("")MapRDBStatistics statistics) { + @JsonProperty("") MapRDBStatistics statistics) { super(userName, storagePlugin, formatPlugin, scanSpec, columns, statistics); } |