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 <wael....@gmail.com>
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 <jenk...@fulliautomatix.ics.uci.edu>
    Tested-by: Jenkins <jenk...@fulliautomatix.ics.uci.edu>
    Reviewed-by: Hussain Towaileb <hussai...@gmail.com>
---
 .../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) {

Reply via email to