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)