You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@asterixdb.apache.org by "Taewoo Kim (JIRA)" <ji...@apache.org> on 2017/07/13 23:50:00 UTC
[jira] [Created] (ASTERIXDB-1988) The nested primary key should not
be assigned.
Taewoo Kim created ASTERIXDB-1988:
-------------------------------------
Summary: The nested primary key should not be assigned.
Key: ASTERIXDB-1988
URL: https://issues.apache.org/jira/browse/ASTERIXDB-1988
Project: Apache AsterixDB
Issue Type: Bug
Reporter: Taewoo Kim
Currently, if the primary key of a dataset is nested, during the query compilation, it is assigned by an assign operator again. This should be avoidable since this is not necessary. You can see this in the "/asterix-app/src/test/resources/runtimets/queries_sqlpp/nested-index/index-selection/orders-index-custkey" test.
Query -
{code}
drop dataverse tpch if exists;
create dataverse tpch;
use tpch;
create type tpch.OrderTypetmp as
closed {
o_orderkey : bigint,
o_custkey : bigint,
o_orderstatus : string,
o_totalprice : double,
o_orderdate : string,
o_orderpriority : string,
o_clerk : string,
o_shippriority : bigint,
o_comment : string
}
create type tpch.OrderType as
closed {
nested : OrderTypetmp
}
create dataset Orderstmp(OrderTypetmp) primary key o_orderkey;
create dataset Orders(OrderType) primary key nested.o_orderkey;
create index idx_Orders_Custkey on Orders (nested.o_custkey) type btree;
select element {'o_orderkey':o.nested.o_orderkey,'o_custkey':o.nested.o_custkey}
from Orders as o
where (o.nested.o_custkey = 40)
order by o.nested.o_orderkey
;
{code}
Nested Version (above)
{code}
distribute result [$$11]
-- DISTRIBUTE_RESULT |PARTITIONED|
exchange
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
project ([$$11])
-- STREAM_PROJECT |PARTITIONED|
assign [$$11] <- [{"o_orderkey": $$17, "o_custkey": $$16}]
-- ASSIGN |PARTITIONED|
exchange
-- SORT_MERGE_EXCHANGE [$$17(ASC) ] |PARTITIONED|
order (ASC, $$17)
-- STABLE_SORT [$$17(ASC)] |PARTITIONED|
exchange
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
select (eq($$16, 40))
-- STREAM_SELECT |PARTITIONED|
project ([$$16, $$17])
-- STREAM_PROJECT |PARTITIONED|
assign [$$17, $$16] <- [$$20.getField(0), $$20.getField(1)]
-- ASSIGN |PARTITIONED|
project ([$$20])
-- STREAM_PROJECT |PARTITIONED|
assign [$$20] <- [$$o.getField(0)]
-- ASSIGN |PARTITIONED|
project ([$$o])
-- STREAM_PROJECT |PARTITIONED|
exchange
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
unnest-map [$$15, $$o] <- index-search("Orders", 0, "tpch", "Orders", FALSE, FALSE, 1, $$24, 1, $$24, TRUE, TRUE, TRUE)
-- BTREE_SEARCH |PARTITIONED|
exchange
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
order (ASC, $$24)
-- STABLE_SORT [$$24(ASC)] |PARTITIONED|
exchange
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
project ([$$24])
-- STREAM_PROJECT |PARTITIONED|
exchange
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
unnest-map [$$23, $$24] <- index-search("idx_Orders_Custkey", 0, "tpch", "Orders", FALSE, FALSE, 1, $$21, 1, $$22, TRUE, TRUE, TRUE)
-- BTREE_SEARCH |PARTITIONED|
exchange
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
assign [$$21, $$22] <- [40, 40]
-- ASSIGN |PARTITIONED|
empty-tuple-source
-- EMPTY_TUPLE_SOURCE |PARTITIONED|
{code}
Non-nested
{code}
distribute result [$$8]
-- DISTRIBUTE_RESULT |PARTITIONED|
exchange
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
project ([$$8])
-- STREAM_PROJECT |PARTITIONED|
assign [$$8] <- [{"o_orderkey": $$11, "o_custkey": $$10}]
-- ASSIGN |PARTITIONED|
exchange
-- SORT_MERGE_EXCHANGE [$$11(ASC) ] |PARTITIONED|
select (eq($$10, 40))
-- STREAM_SELECT |PARTITIONED|
project ([$$10, $$11])
-- STREAM_PROJECT |PARTITIONED|
assign [$$10] <- [$$o.getField(1)]
-- ASSIGN |PARTITIONED|
exchange
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
unnest-map [$$11, $$o] <- index-search("Orders", 0, "tpch", "Orders", FALSE, FALSE, 1, $$17, 1, $$17, TRUE, TRUE, TRUE)
-- BTREE_SEARCH |PARTITIONED|
exchange
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
order (ASC, $$17)
-- STABLE_SORT [$$17(ASC)] |PARTITIONED|
exchange
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
project ([$$17])
-- STREAM_PROJECT |PARTITIONED|
exchange
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
unnest-map [$$16, $$17] <- index-search("idx_Orders_Custkey", 0, "tpch", "Orders", FALSE, FALSE, 1, $$14, 1, $$15, TRUE, TRUE, TRUE)
-- BTREE_SEARCH |PARTITIONED|
exchange
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
assign [$$14, $$15] <- [40, 40]
-- ASSIGN |PARTITIONED|
empty-tuple-source
-- EMPTY_TUPLE_SOURCE |PARTITIONED|
{code}
You can see that the primary key is not assigned again in the non-nested version. But, it is assigned again in the nested version.
--
This message was sent by Atlassian JIRA
(v6.4.14#64029)