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:51:00 UTC
[jira] [Assigned] (ASTERIXDB-1988) The nested primary key should
not be re-assigned.
[ https://issues.apache.org/jira/browse/ASTERIXDB-1988?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Taewoo Kim reassigned ASTERIXDB-1988:
-------------------------------------
Assignee: Ildar Absalyamov
> The nested primary key should not be re-assigned.
> -------------------------------------------------
>
> Key: ASTERIXDB-1988
> URL: https://issues.apache.org/jira/browse/ASTERIXDB-1988
> Project: Apache AsterixDB
> Issue Type: Bug
> Reporter: Taewoo Kim
> Assignee: Ildar Absalyamov
>
> 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)