You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@asterixdb.apache.org by "Yingyi Bu (JIRA)" <ji...@apache.org> on 2017/08/17 01:03:00 UTC
[jira] [Created] (ASTERIXDB-2044) Listify in subqueries
Yingyi Bu created ASTERIXDB-2044:
------------------------------------
Summary: Listify in subqueries
Key: ASTERIXDB-2044
URL: https://issues.apache.org/jira/browse/ASTERIXDB-2044
Project: Apache AsterixDB
Issue Type: Bug
Components: COMP - Compiler
Reporter: Yingyi Bu
Assignee: Yingyi Bu
The following query will result in unnecessary listifies in the optimized query plan.
{noformat}
DROP DATAVERSE tpch IF EXISTS;
CREATE dataverse tpch;
USE tpch;
CREATE TYPE LineItemType AS CLOSED {
l_orderkey : integer,
l_partkey : integer,
l_suppkey : integer,
l_linenumber : integer,
l_quantity : double,
l_extendedprice : double,
l_discount : double,
l_tax : double,
l_returnflag : string,
l_linestatus : string,
l_shipdate : string,
l_commitdate : string,
l_receiptdate : string,
l_shipinstruct : string,
l_shipmode : string,
l_comment : string
}
CREATE DATASET LineItem(LineItemType) PRIMARY KEY l_orderkey,l_linenumber;
SELECT l_returnflag AS l_returnflag,
l_linestatus AS l_linestatus,
coll_count(cheap) AS count_cheaps,
coll_count(expensive) AS count_expensives
FROM LineItem AS l
/* +hash */
GROUP BY l.l_returnflag AS l_returnflag,l.l_linestatus AS l_linestatus
GROUP AS g
LET cheap = (
SELECT ELEMENT m
FROM (FROM g SELECT VALUE l) AS m
WHERE m.l_discount > 0.05
),
expensive = (
SELECT ELEMENT m
FROM (FROM g SELECT VALUE l) AS m
WHERE m.l_discount <= 0.05
)
ORDER BY l_returnflag,l_linestatus
;
{noformat}
{noformat}
distribute result [$$31]
-- DISTRIBUTE_RESULT |PARTITIONED|
exchange
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
project ([$$31])
-- STREAM_PROJECT |PARTITIONED|
assign [$$31] <- [{"l_returnflag": $$l_returnflag, "l_linestatus": $$l_linestatus, "count_cheaps": $$36, "count_expensives": $$37}]
-- ASSIGN |PARTITIONED|
exchange
-- SORT_MERGE_EXCHANGE [$$l_returnflag(ASC), $$l_linestatus(ASC) ] |PARTITIONED|
project ([$$l_returnflag, $$l_linestatus, $$36, $$37])
-- STREAM_PROJECT |PARTITIONED|
subplan {
aggregate [$$37] <- [agg-count($$m)]
-- AGGREGATE |LOCAL|
select (le($$39, 0.05))
-- STREAM_SELECT |LOCAL|
assign [$$39] <- [$$m.getField(6)]
-- ASSIGN |LOCAL|
unnest $$m <- scan-collection($$24)
-- UNNEST |LOCAL|
subplan {
aggregate [$$24] <- [listify($$23)]
-- AGGREGATE |LOCAL|
assign [$$23] <- [$$g.getField(0)]
-- ASSIGN |LOCAL|
unnest $$g <- scan-collection($$15)
-- UNNEST |LOCAL|
nested tuple source
-- NESTED_TUPLE_SOURCE |LOCAL|
}
-- SUBPLAN |LOCAL|
nested tuple source
-- NESTED_TUPLE_SOURCE |LOCAL|
}
-- SUBPLAN |PARTITIONED|
subplan {
aggregate [$$36] <- [agg-count($$m)]
-- AGGREGATE |LOCAL|
select (gt($$38, 0.05))
-- STREAM_SELECT |LOCAL|
assign [$$38] <- [$$m.getField(6)]
-- ASSIGN |LOCAL|
unnest $$m <- scan-collection($$18)
-- UNNEST |LOCAL|
subplan {
aggregate [$$18] <- [listify($$17)]
-- AGGREGATE |LOCAL|
assign [$$17] <- [$$g.getField(0)]
-- ASSIGN |LOCAL|
unnest $$g <- scan-collection($$15)
-- UNNEST |LOCAL|
nested tuple source
-- NESTED_TUPLE_SOURCE |LOCAL|
}
-- SUBPLAN |LOCAL|
nested tuple source
-- NESTED_TUPLE_SOURCE |LOCAL|
}
-- SUBPLAN |PARTITIONED|
exchange
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
group by ([$$l_returnflag := $$32; $$l_linestatus := $$33]) decor ([]) {
aggregate [$$15] <- [listify($$g)]
-- AGGREGATE |LOCAL|
nested tuple source
-- NESTED_TUPLE_SOURCE |LOCAL|
}
-- PRE_CLUSTERED_GROUP_BY[$$32, $$33] |PARTITIONED|
exchange
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
order (ASC, $$32) (ASC, $$33)
-- STABLE_SORT [$$32(ASC), $$33(ASC)] |PARTITIONED|
exchange
-- HASH_PARTITION_EXCHANGE [$$32, $$33] |PARTITIONED|
project ([$$32, $$33, $$g])
-- STREAM_PROJECT |PARTITIONED|
assign [$$g, $$33, $$32] <- [{"l": $$l}, $$l.getField(9), $$l.getField(8)]
-- ASSIGN |PARTITIONED|
project ([$$l])
-- STREAM_PROJECT |PARTITIONED|
exchange
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
data-scan []<-[$$34, $$35, $$l] <- tpch.LineItem
-- DATASOURCE_SCAN |PARTITIONED|
exchange
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
empty-tuple-source
-- EMPTY_TUPLE_SOURCE |PARTITIONED|
{noformat}
--
This message was sent by Atlassian JIRA
(v6.4.14#64029)