You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@asterixdb.apache.org by dl...@apache.org on 2020/11/12 19:08:36 UTC
[asterixdb] branch master updated: [ASTERIXDB-2798][COMP] Copy
limit through subplans
This is an automated email from the ASF dual-hosted git repository.
dlych 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 4ca89b5 [ASTERIXDB-2798][COMP] Copy limit through subplans
4ca89b5 is described below
commit 4ca89b5d5b989d4017746b2277c39e9a4a2b1e7d
Author: Dmitry Lychagin <dm...@couchbase.com>
AuthorDate: Thu Nov 12 09:28:52 2020 -0800
[ASTERIXDB-2798][COMP] Copy limit through subplans
- user model changes: no
- storage format changes: no
- interface changes: no
Details:
- CopyLimitDownRule should push limit through subplans
Change-Id: Ia5fa4b7a25cafadb6dd2c050749e851e7e2adec5
Reviewed-on: https://asterix-gerrit.ics.uci.edu/c/asterixdb/+/8846
Integration-Tests: Jenkins <je...@fulliautomatix.ics.uci.edu>
Tested-by: Jenkins <je...@fulliautomatix.ics.uci.edu>
Reviewed-by: Dmitry Lychagin <dm...@couchbase.com>
Reviewed-by: Ali Alsuliman <al...@gmail.com>
---
.../queries_sqlpp/flwor/at00/at00.6.async.sqlpp | 2 +-
.../push-limit-to-primary-scan.1.ddl.sqlpp | 19 ++++++++--
.../push-limit-to-primary-scan.8.query.sqlpp} | 22 +++++-------
.../push-limit-to-primary-scan.9.query.sqlpp} | 20 ++++-------
.../push-limit-to-primary-scan.8.adm | 41 ++++++++++++++++++++++
.../push-limit-to-primary-scan.9.adm | 5 +++
.../rewriter/rules/CopyLimitDownRule.java | 1 +
7 files changed, 79 insertions(+), 31 deletions(-)
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/flwor/at00/at00.6.async.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/flwor/at00/at00.6.async.sqlpp
index 7ba0e96..10b8c85 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/flwor/at00/at00.6.async.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/flwor/at00/at00.6.async.sqlpp
@@ -34,4 +34,4 @@ from
) as gen0,
gen0.i as j at p
where p < 4
-order by partkey, shipdate;
+order by partkey, p, shipdate;
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/limit/push-limit-to-primary-scan/push-limit-to-primary-scan.1.ddl.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/limit/push-limit-to-primary-scan/push-limit-to-primary-scan.1.ddl.sqlpp
index 36af900..dd756b0 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/limit/push-limit-to-primary-scan/push-limit-to-primary-scan.1.ddl.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/limit/push-limit-to-primary-scan/push-limit-to-primary-scan.1.ddl.sqlpp
@@ -29,7 +29,7 @@ create dataverse test;
use test;
-create type test.DBLPType as
+create type DBLPType as
{
id : bigint,
dblpid : string,
@@ -58,6 +58,21 @@ create type onekType1 as
string4 : string
};
-create dataset DBLP1(DBLPType) primary key id;
+create dataset DBLP1(DBLPType) primary key id;
create dataset onek1(onekType1) primary key unique2;
+
+create function drop_fields(obj, field1, field2, field3) {
+ (
+ select value object_remove(t3, field3)
+ from (
+ select value object_remove(t2, field2)
+ from (
+ select value object_remove(t1, field1)
+ from (
+ select value t0 from to_array(obj) t0
+ ) t1
+ ) t2
+ ) t3
+ )[0]
+};
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/flwor/at00/at00.6.async.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/limit/push-limit-to-primary-scan/push-limit-to-primary-scan.8.query.sqlpp
similarity index 62%
copy from asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/flwor/at00/at00.6.async.sqlpp
copy to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/limit/push-limit-to-primary-scan/push-limit-to-primary-scan.8.query.sqlpp
index 7ba0e96..d25d975 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/flwor/at00/at00.6.async.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/limit/push-limit-to-primary-scan/push-limit-to-primary-scan.8.query.sqlpp
@@ -16,22 +16,16 @@
* specific language governing permissions and limitations
* under the License.
*/
+
/*
- * Description : Test for clause of the position variable in FLWOR expression
- * Expected Result : Success
- * Date : 09/17/2013
+ * Test limit pushdown with UDFs (ASTERIXDB-2798).
*/
--- handlevariable=status
-
use test;
-select element {'partkey':gen0.partkey,'pid':p,'shipdate':j.l_shipdate}
-from
- ( select element {'partkey':i.l_partkey, 'i': (select value x.i from g as x order by x.i.l_shipdate) }
- from LineItem as i
- group by i.l_partkey group as g
- ) as gen0,
- gen0.i as j at p
-where p < 4
-order by partkey, shipdate;
+explain
+
+select value drop_fields(paper, 'title', 'authors', 'misc')
+from DBLP1 as paper
+order by id
+limit 5 offset 5;
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/flwor/at00/at00.6.async.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/limit/push-limit-to-primary-scan/push-limit-to-primary-scan.9.query.sqlpp
similarity index 62%
copy from asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/flwor/at00/at00.6.async.sqlpp
copy to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/limit/push-limit-to-primary-scan/push-limit-to-primary-scan.9.query.sqlpp
index 7ba0e96..66309f8 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/flwor/at00/at00.6.async.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/limit/push-limit-to-primary-scan/push-limit-to-primary-scan.9.query.sqlpp
@@ -16,22 +16,14 @@
* specific language governing permissions and limitations
* under the License.
*/
+
/*
- * Description : Test for clause of the position variable in FLWOR expression
- * Expected Result : Success
- * Date : 09/17/2013
+ * Test limit pushdown with UDFs (ASTERIXDB-2798).
*/
--- handlevariable=status
-
use test;
-select element {'partkey':gen0.partkey,'pid':p,'shipdate':j.l_shipdate}
-from
- ( select element {'partkey':i.l_partkey, 'i': (select value x.i from g as x order by x.i.l_shipdate) }
- from LineItem as i
- group by i.l_partkey group as g
- ) as gen0,
- gen0.i as j at p
-where p < 4
-order by partkey, shipdate;
+select value drop_fields(paper, 'title', 'authors', 'misc')
+from DBLP1 as paper
+order by id
+limit 5 offset 5;
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/limit/push-limit-to-primary-scan/push-limit-to-primary-scan.8.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/limit/push-limit-to-primary-scan/push-limit-to-primary-scan.8.adm
new file mode 100644
index 0000000..e11c19d
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/limit/push-limit-to-primary-scan/push-limit-to-primary-scan.8.adm
@@ -0,0 +1,41 @@
+distribute result [$$75]
+-- DISTRIBUTE_RESULT |UNPARTITIONED|
+ exchange
+ -- ONE_TO_ONE_EXCHANGE |UNPARTITIONED|
+ limit 5, 5
+ -- STREAM_LIMIT |UNPARTITIONED|
+ project ([$$75])
+ -- STREAM_PROJECT |PARTITIONED|
+ assign [$$75] <- [get-item($$73, 0)]
+ -- ASSIGN |PARTITIONED|
+ project ([$$73])
+ -- STREAM_PROJECT |PARTITIONED|
+ exchange
+ -- SORT_MERGE_EXCHANGE [$$77(ASC) ] |PARTITIONED|
+ project ([$$73, $$77])
+ -- STREAM_PROJECT |PARTITIONED|
+ subplan {
+ aggregate [$$73] <- [listify($$72)]
+ -- AGGREGATE |LOCAL|
+ assign [$$72] <- [object-remove(object-remove(object-remove($$t1, "title"), "authors"), "misc")]
+ -- ASSIGN |LOCAL|
+ unnest $$t1 <- scan-collection($$64)
+ -- UNNEST |LOCAL|
+ nested tuple source
+ -- NESTED_TUPLE_SOURCE |LOCAL|
+ }
+ -- SUBPLAN |PARTITIONED|
+ project ([$$77, $$64])
+ -- STREAM_PROJECT |PARTITIONED|
+ assign [$$64] <- [to-array($$paper)]
+ -- ASSIGN |PARTITIONED|
+ limit 10
+ -- STREAM_LIMIT |PARTITIONED|
+ exchange
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ data-scan []<-[$$77, $$paper] <- test.DBLP1 limit 10
+ -- DATASOURCE_SCAN |PARTITIONED|
+ exchange
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ empty-tuple-source
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/limit/push-limit-to-primary-scan/push-limit-to-primary-scan.9.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/limit/push-limit-to-primary-scan/push-limit-to-primary-scan.9.adm
new file mode 100644
index 0000000..77aa145
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/limit/push-limit-to-primary-scan/push-limit-to-primary-scan.9.adm
@@ -0,0 +1,5 @@
+{ "id": 6, "dblpid": "books/acm/kim95/DittrichD95" }
+{ "id": 7, "dblpid": "books/acm/kim95/Garcia-MolinaH95" }
+{ "id": 8, "dblpid": "books/acm/kim95/Goodman95" }
+{ "id": 9, "dblpid": "books/acm/kim95/Kaiser95" }
+{ "id": 10, "dblpid": "books/acm/kim95/KelleyGKRG95" }
\ No newline at end of file
diff --git a/hyracks-fullstack/algebricks/algebricks-rewriter/src/main/java/org/apache/hyracks/algebricks/rewriter/rules/CopyLimitDownRule.java b/hyracks-fullstack/algebricks/algebricks-rewriter/src/main/java/org/apache/hyracks/algebricks/rewriter/rules/CopyLimitDownRule.java
index 382b80d..7dd86b1 100644
--- a/hyracks-fullstack/algebricks/algebricks-rewriter/src/main/java/org/apache/hyracks/algebricks/rewriter/rules/CopyLimitDownRule.java
+++ b/hyracks-fullstack/algebricks/algebricks-rewriter/src/main/java/org/apache/hyracks/algebricks/rewriter/rules/CopyLimitDownRule.java
@@ -150,6 +150,7 @@ public class CopyLimitDownRule implements IAlgebraicRewriteRule {
private static boolean isSafeOpCandidate(ILogicalOperator op) {
switch (op.getOperatorTag()) {
case UNIONALL:
+ case SUBPLAN: // subplan is a 'map' but is not yet marked as such
return true;
// exclude following 'map' operators because they change cardinality
case SELECT: