asterixdb-notifications mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Ildar Absalyamov (JIRA)" <j...@apache.org>
Subject [jira] [Updated] (ASTERIXDB-1285) Introduce index rewrite does not properly handle conjunctive predicates
Date Sun, 31 Jan 2016 20:40:39 GMT

     [ https://issues.apache.org/jira/browse/ASTERIXDB-1285?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]

Ildar Absalyamov updated ASTERIXDB-1285:
----------------------------------------
    Description: 
The following query with a conjunctive predicate produces incorrect B-tree search argument
{noformat}
drop dataverse tpch if exists;
create dataverse tpch;
use dataverse tpch;

create type OrderType as open {
  o_orderkey: int32,
  o_custkey: int32,
  o_orderstatus: string,
  o_totalprice: double,
  o_orderdate: string,
  o_orderpriority: string,
  o_clerk: string,
  o_shippriority: int32,
  o_comment: string
}

create dataset Orders(OrderType) primary key o_orderkey;

for $o in dataset('Orders')
where $o.o_orderkey >=int32("0") and $o.o_orderkey < "foo"
order by $o.o_orderkey
return $o
{noformat}
Incorrect query plan:
{noformat}
distribute result [%0->$$0]
-- DISTRIBUTE_RESULT  |PARTITIONED|
  exchange 
  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
    project ([$$0])
    -- STREAM_PROJECT  |PARTITIONED|
      exchange 
      -- SORT_MERGE_EXCHANGE [$$10(ASC) ]  |PARTITIONED|
        unnest-map [$$10, $$0] <- function-call: asterix:index-search, Args:[AString: {Orders},
AInt32: {0}, AString: {tpch}, AString: {Orders}, ABoolean: {false}, ABoolean: {false}, ABoolean:
{false}, AInt32: {1}, %0->$$12, AInt32: {1}, %0->$$13, TRUE, FALSE, FALSE]
        -- BTREE_SEARCH  |PARTITIONED|
          exchange 
          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
            assign [$$12, $$13] <- [AInt32: {0}, AString: {foo}]
            -- ASSIGN  |PARTITIONED|
              empty-tuple-source
              -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
{noformat}
The correct query plan should have created a search argument on the first part of conjunctive
predicate and leave selectOp to filter out the second part.
This happens because introduce index rewrite rule only considers first part of conjunctive
predicate to determine the index applicability

  was:
The following query with a conjunctive predicate produces incorrect B-tree search predicate
{noformat}
drop dataverse tpch if exists;
create dataverse tpch;
use dataverse tpch;

create type OrderType as open {
  o_orderkey: int32,
  o_custkey: int32,
  o_orderstatus: string,
  o_totalprice: double,
  o_orderdate: string,
  o_orderpriority: string,
  o_clerk: string,
  o_shippriority: int32,
  o_comment: string
}

create dataset Orders(OrderType) primary key o_orderkey;

for $o in dataset('Orders')
where $o.o_orderkey >=int32("0") and $o.o_orderkey < "foo"
order by $o.o_orderkey
return $o
{noformat}
Incorrect query plan:
{noformat}
distribute result [%0->$$0]
-- DISTRIBUTE_RESULT  |PARTITIONED|
  exchange 
  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
    project ([$$0])
    -- STREAM_PROJECT  |PARTITIONED|
      exchange 
      -- SORT_MERGE_EXCHANGE [$$10(ASC) ]  |PARTITIONED|
        unnest-map [$$10, $$0] <- function-call: asterix:index-search, Args:[AString: {Orders},
AInt32: {0}, AString: {tpch}, AString: {Orders}, ABoolean: {false}, ABoolean: {false}, ABoolean:
{false}, AInt32: {1}, %0->$$12, AInt32: {1}, %0->$$13, TRUE, FALSE, FALSE]
        -- BTREE_SEARCH  |PARTITIONED|
          exchange 
          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
            assign [$$12, $$13] <- [AInt32: {0}, AString: {foo}]
            -- ASSIGN  |PARTITIONED|
              empty-tuple-source
              -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
{noformat}
The correct query plan should have created a search predicate on the first part of conjunctive
expression and leave selectOp to filter out the second part.
This happens because introduce index rewrite rule only considers first part of conjunctive
predicate to determine the index applicability


> Introduce index rewrite does not properly handle conjunctive predicates
> -----------------------------------------------------------------------
>
>                 Key: ASTERIXDB-1285
>                 URL: https://issues.apache.org/jira/browse/ASTERIXDB-1285
>             Project: Apache AsterixDB
>          Issue Type: Bug
>            Reporter: Ildar Absalyamov
>            Assignee: Ildar Absalyamov
>            Priority: Minor
>
> The following query with a conjunctive predicate produces incorrect B-tree search argument
> {noformat}
> drop dataverse tpch if exists;
> create dataverse tpch;
> use dataverse tpch;
> create type OrderType as open {
>   o_orderkey: int32,
>   o_custkey: int32,
>   o_orderstatus: string,
>   o_totalprice: double,
>   o_orderdate: string,
>   o_orderpriority: string,
>   o_clerk: string,
>   o_shippriority: int32,
>   o_comment: string
> }
> create dataset Orders(OrderType) primary key o_orderkey;
> for $o in dataset('Orders')
> where $o.o_orderkey >=int32("0") and $o.o_orderkey < "foo"
> order by $o.o_orderkey
> return $o
> {noformat}
> Incorrect query plan:
> {noformat}
> distribute result [%0->$$0]
> -- DISTRIBUTE_RESULT  |PARTITIONED|
>   exchange 
>   -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
>     project ([$$0])
>     -- STREAM_PROJECT  |PARTITIONED|
>       exchange 
>       -- SORT_MERGE_EXCHANGE [$$10(ASC) ]  |PARTITIONED|
>         unnest-map [$$10, $$0] <- function-call: asterix:index-search, Args:[AString:
{Orders}, AInt32: {0}, AString: {tpch}, AString: {Orders}, ABoolean: {false}, ABoolean: {false},
ABoolean: {false}, AInt32: {1}, %0->$$12, AInt32: {1}, %0->$$13, TRUE, FALSE, FALSE]
>         -- BTREE_SEARCH  |PARTITIONED|
>           exchange 
>           -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
>             assign [$$12, $$13] <- [AInt32: {0}, AString: {foo}]
>             -- ASSIGN  |PARTITIONED|
>               empty-tuple-source
>               -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
> {noformat}
> The correct query plan should have created a search argument on the first part of conjunctive
predicate and leave selectOp to filter out the second part.
> This happens because introduce index rewrite rule only considers first part of conjunctive
predicate to determine the index applicability



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Mime
View raw message