This is an automated email from the ASF dual-hosted git repository.
wyk pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/asterixdb.git
The following commit(s) were added to refs/heads/master by this push:
new b27f0db529 [NO ISSUE][COMP] Fixes and cleanup for external filters
b27f0db529 is described below
commit b27f0db529e287140b92e1b9213466aa7bb55df4
Author: Wail Alkowaileet <[email protected]>
AuthorDate: Tue Aug 8 11:03:09 2023 -0700
[NO ISSUE][COMP] Fixes and cleanup for external filters
- user model changes: no
- storage format changes: no
- interface changes: no
Details:
- Enable filter pushdowns for external datasets
- Always register external dataset scans
- Make ExternalDataPrefix with KEY_PATH
Change-Id: I08b509fca0eb3ab9aad82e816dfe4849adf725eb
Reviewed-on: https://asterix-gerrit.ics.uci.edu/c/asterixdb/+/17707
Integration-Tests: Jenkins <[email protected]>
Tested-by: Jenkins <[email protected]>
Reviewed-by: Hussain Towaileb <[email protected]>
---
.../optimizer/rules/PushValueAccessAndFilterDownRule.java | 8 ++++----
.../optimizer/rules/pushdown/PushdownProcessorsExecutor.java | 3 ++-
.../rules/pushdown/visitor/PushdownOperatorVisitor.java | 9 ++-------
.../org/apache/asterix/external/util/ExternalDataPrefix.java | 7 ++++++-
.../main/java/org/apache/asterix/metadata/utils/DatasetUtil.java | 4 ++--
5 files changed, 16 insertions(+), 15 deletions(-)
diff --git
a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/PushValueAccessAndFilterDownRule.java
b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/PushValueAccessAndFilterDownRule.java
index 3b298d07a3..c74c2930e5 100644
---
a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/PushValueAccessAndFilterDownRule.java
+++
b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/PushValueAccessAndFilterDownRule.java
@@ -113,11 +113,11 @@ public class PushValueAccessAndFilterDownRule implements
IAlgebraicRewriteRule {
pushdownProcessorsExecutor.add(new
ColumnFilterPushdownProcessor(pushdownContext, context));
// Performs range-filter pushdowns
pushdownProcessorsExecutor.add(new
ColumnRangeFilterPushdownProcessor(pushdownContext, context));
- // Performs prefix pushdowns
- pushdownProcessorsExecutor.add(new
ExternalDatasetFilterPushdownProcessor(pushdownContext, context));
- // Inlines AND/OR expression (must be last to run)
- pushdownProcessorsExecutor.add(new
InlineFilterExpressionsProcessor(pushdownContext, context));
}
+ // Performs prefix pushdowns
+ pushdownProcessorsExecutor.add(new
ExternalDatasetFilterPushdownProcessor(pushdownContext, context));
+ // Inlines AND/OR expression (must be last to run)
+ pushdownProcessorsExecutor.add(new
InlineFilterExpressionsProcessor(pushdownContext, context));
}
/**
diff --git
a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/pushdown/PushdownProcessorsExecutor.java
b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/pushdown/PushdownProcessorsExecutor.java
index 1530f55a8c..ab6a26cd6a 100644
---
a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/pushdown/PushdownProcessorsExecutor.java
+++
b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/pushdown/PushdownProcessorsExecutor.java
@@ -67,7 +67,8 @@ public class PushdownProcessorsExecutor {
if (dataset.getDatasetFormatInfo().getFormat() ==
DatasetConfig.DatasetFormat.COLUMN) {
info = createInternalColumnarDatasetInfo(scanDefineDescriptor,
context);
} else if (dataset.getDatasetType() ==
DatasetConfig.DatasetType.EXTERNAL
- && DatasetUtil.isFieldAccessPushdownSupported(dataset)) {
+ && (DatasetUtil.isFieldAccessPushdownSupported(dataset)
+ ||
DatasetUtil.isFilterPushdownSupported(dataset))) {
info =
createExternalDatasetProjectionInfo(scanDefineDescriptor, context);
}
setInfoToDataScan(scanOp, info);
diff --git
a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/pushdown/visitor/PushdownOperatorVisitor.java
b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/pushdown/visitor/PushdownOperatorVisitor.java
index 65b131a5e6..dd9acd5ee8 100644
---
a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/pushdown/visitor/PushdownOperatorVisitor.java
+++
b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/pushdown/visitor/PushdownOperatorVisitor.java
@@ -26,13 +26,11 @@ import java.util.Set;
import org.apache.asterix.common.config.DatasetConfig;
import org.apache.asterix.common.config.DatasetConfig.DatasetFormat;
import org.apache.asterix.common.metadata.DataverseName;
-import org.apache.asterix.external.util.ExternalDataUtils;
import org.apache.asterix.metadata.declared.DataSource;
import org.apache.asterix.metadata.declared.DataSourceId;
import org.apache.asterix.metadata.declared.DatasetDataSource;
import org.apache.asterix.metadata.declared.MetadataProvider;
import org.apache.asterix.metadata.entities.Dataset;
-import org.apache.asterix.metadata.entities.ExternalDatasetDetails;
import org.apache.asterix.om.functions.BuiltinFunctions;
import org.apache.asterix.om.utils.ConstantExpressionUtil;
import org.apache.asterix.optimizer.rules.pushdown.PushdownContext;
@@ -202,11 +200,8 @@ public class PushdownOperatorVisitor implements
ILogicalOperatorVisitor<Void, Vo
Dataset dataset = getDataset(dataSource);
//Only external dataset can have pushed down expressions
- if (dataset.getDatasetType() == DatasetConfig.DatasetType.EXTERNAL
- && !ExternalDataUtils
- .supportsPushdown(((ExternalDatasetDetails)
dataset.getDatasetDetails()).getProperties())
- || dataset.getDatasetType() ==
DatasetConfig.DatasetType.INTERNAL
- && dataset.getDatasetFormatInfo().getFormat() ==
DatasetFormat.ROW) {
+ if (dataset.getDatasetType() == DatasetConfig.DatasetType.INTERNAL
+ && dataset.getDatasetFormatInfo().getFormat() ==
DatasetFormat.ROW) {
return null;
}
diff --git
a/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/util/ExternalDataPrefix.java
b/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/util/ExternalDataPrefix.java
index 899a179f63..ec56009ad8 100644
---
a/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/util/ExternalDataPrefix.java
+++
b/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/util/ExternalDataPrefix.java
@@ -21,6 +21,7 @@ package org.apache.asterix.external.util;
import static
org.apache.asterix.external.util.ExternalDataConstants.COMPUTED_FIELD_PATTERN;
import static
org.apache.asterix.external.util.ExternalDataConstants.DEFINITION_FIELD_NAME;
+import static org.apache.asterix.external.util.ExternalDataConstants.KEY_PATH;
import static
org.apache.asterix.external.util.ExternalDataConstants.PREFIX_DEFAULT_DELIMITER;
import java.util.ArrayList;
@@ -68,7 +69,7 @@ public class ExternalDataPrefix {
}
public ExternalDataPrefix(Map<String, String> configuration) throws
AlgebricksException {
- this(configuration.get(DEFINITION_FIELD_NAME));
+ this(getDefinitionOrPath(configuration));
}
public ExternalDataPrefix(String prefix) throws AlgebricksException {
@@ -245,4 +246,8 @@ public class ExternalDataPrefix {
return values;
}
+
+ private static String getDefinitionOrPath(Map<String, String>
configuration) {
+ return configuration.getOrDefault(DEFINITION_FIELD_NAME,
configuration.get(KEY_PATH));
+ }
}
diff --git
a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/utils/DatasetUtil.java
b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/utils/DatasetUtil.java
index 88eafcd254..44964f3949 100644
---
a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/utils/DatasetUtil.java
+++
b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/utils/DatasetUtil.java
@@ -699,8 +699,8 @@ public class DatasetUtil {
if (dataset.getDatasetType() == DatasetType.INTERNAL) {
return dataset.getDatasetFormatInfo().getFormat() ==
DatasetConfig.DatasetFormat.COLUMN;
}
- // TODO add external dataset with dynamic prefixes
- return false;
+ // External dataset support filter pushdown
+ return true;
}
public static boolean isRangeFilterPushdownSupported(Dataset dataset) {