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)