You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@asterixdb.apache.org by "Gift Sinthong (Jira)" <ji...@apache.org> on 2020/11/10 21:48:00 UTC
[jira] [Created] (ASTERIXDB-2798) Limit pushdown not working when
SQL++ functions are involved
Gift Sinthong created ASTERIXDB-2798:
----------------------------------------
Summary: Limit pushdown not working when SQL++ functions are involved
Key: ASTERIXDB-2798
URL: https://issues.apache.org/jira/browse/ASTERIXDB-2798
Project: Apache AsterixDB
Issue Type: Bug
Components: COMP - Compiler, SQL - Translator SQL++
Affects Versions: 0.9.6
Reporter: Gift Sinthong
I created a function below.
{code:java}
CREATE OR REPLACE FUNCTION drop_columns(r){ (SELECT VALUE OBJECT_REMOVE(t, 'nickname') FROM (SELECT VALUE OBJECT_REMOVE(t, 'gender') FROM (SELECT VALUE t FROM to_array(r) AS t) t) t)[0]};
{code}
Apply it to a dataset.
{code:java}
SELECT VALUE drop_columns(t) FROM (SELECT VALUE t FROM TinySocial.GleambookUsers t) t LIMIT 5;
{code}
Here is the resulting query plan. We don't get limit pushdown here.
{code:java}
distribute result [$$65]
-- DISTRIBUTE_RESULT |UNPARTITIONED|
exchange
-- ONE_TO_ONE_EXCHANGE |UNPARTITIONED|
limit 5
-- STREAM_LIMIT |UNPARTITIONED|
exchange
-- RANDOM_MERGE_EXCHANGE |PARTITIONED|
project ([$$65])
-- STREAM_PROJECT |PARTITIONED|
assign [$$65] <- [get-item($$63, 0)]
-- ASSIGN |PARTITIONED|
limit 5
-- STREAM_LIMIT |PARTITIONED|
project ([$$63])
-- STREAM_PROJECT |PARTITIONED|
subplan {
aggregate [$$63] <- [listify($$62)]
-- AGGREGATE |LOCAL|
assign [$$62] <- [object-remove(object-remove($$t, "gender"), "nickname")]
-- ASSIGN |LOCAL|
unnest $$t <- scan-collection($$57)
-- UNNEST |LOCAL|
nested tuple source
-- NESTED_TUPLE_SOURCE |LOCAL|
}
-- SUBPLAN |PARTITIONED|
project ([$$57])
-- STREAM_PROJECT |PARTITIONED|
assign [$$57] <- [to-array($$t)]
-- ASSIGN |PARTITIONED|
project ([$$t])
-- STREAM_PROJECT |PARTITIONED|
exchange
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
data-scan []<-[$$66, $$t] <- TinySocial.GleambookUsers
-- DATASOURCE_SCAN |PARTITIONED|
exchange
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
empty-tuple-source
-- EMPTY_TUPLE_SOURCE |PARTITIONED|
{code}
Instead, if we do the query below we do get limit pushdown.
{code:java}
SELECT VALUE OBJECT_REMOVE(t, 'nickname') FROM (SELECT VALUE OBJECT_REMOVE(t, 'gender') FROM (SELECT VALUE t FROM TinySocial.GleambookUsers AS t) t) t LIMIT 5;
{code}
Here is that query plan.
{code:java}
distribute result [$$37]
-- DISTRIBUTE_RESULT |UNPARTITIONED|
exchange
-- ONE_TO_ONE_EXCHANGE |UNPARTITIONED|
limit 5
-- STREAM_LIMIT |UNPARTITIONED|
project ([$$37])
-- STREAM_PROJECT |PARTITIONED|
exchange
-- SORT_MERGE_EXCHANGE [$$38(ASC) ] |PARTITIONED|
project ([$$38, $$37])
-- STREAM_PROJECT |PARTITIONED|
assign [$$37] <- [object-remove(object-remove($$t, "gender"), "nickname")]
-- ASSIGN |PARTITIONED|
limit 5
-- STREAM_LIMIT |PARTITIONED|
exchange
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
data-scan []<-[$$38, $$t] <- TinySocial.GleambookUsers limit 5
-- DATASOURCE_SCAN |PARTITIONED|
exchange
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
empty-tuple-source
-- EMPTY_TUPLE_SOURCE |PARTITIONED|
{code}
--
This message was sent by Atlassian Jira
(v8.3.4#803005)