Pouria created ASTERIXDB-1332:
---------------------------------

             Summary: Query fails in rewrite phase with stack overflow
                 Key: ASTERIXDB-1332
                 URL: https://issues.apache.org/jira/browse/ASTERIXDB-1332
             Project: Apache AsterixDB
          Issue Type: Bug
          Components: Optimizer
            Reporter: Pouria


A rewritten version of TPCH Q9 (for nested schema) breaks in re-write step:

//The error on cc.log
2016-03-04 10:30:04,642 WARN  [qtp85748029-40] util.log 
(JCLLoggerAdapter.java:warn(437)) - Error for /
java.lang.StackOverflowError
        at 
org.apache.hyracks.algebricks.core.algebra.typing.PropagatingTypeEnvironment.getVarTypeFullList(PropagatingTypeEnvironment.java:84)
        at 
org.apache.hyracks.algebricks.core.algebra.typing.PropagatingTypeEnvironment.getVarType(PropagatingTypeEnvironment.java:73)
        at 
org.apache.hyracks.algebricks.core.algebra.properties.TypePropagationPolicy$1.getVarType(TypePropagationPolicy.java:42)
        at 
org.apache.hyracks.algebricks.core.algebra.typing.PropagatingTypeEnvironment.getVarTypeFullList(PropagatingTypeEnvironment.java:88)
        at 
org.apache.hyracks.algebricks.core.algebra.typing.PropagatingTypeEnvironment.getVarType(PropagatingTypeEnvironment.java:73)
        at 
org.apache.hyracks.algebricks.core.algebra.properties.TypePropagationPolicy$1.getVarType(TypePropagationPolicy.java:42)
        at org.
[… It repeats for tens of lines]

//Here is the Query:

for $profit in (
  for $o in dataset NestedOrders
  for $l3 in (
    for $p in dataset('Part')
    for $l2 in (
      for $ps in dataset('Partsupp')
      for $l1 in (
        for $s1 in (
          for $s in dataset('Supplier')
          for $n in dataset('Nation')
          where $n.n_nationkey = $s.s_nationkey
          return {
            "s_suppkey": $s.s_suppkey,
            "n_name": $n.n_name
          }
        ) //s1
        //for $l in dataset('LineItem')
        for $l in $o.o_lineitems
        //where $s1.s_suppkey = $l.l_suppkey       
        return  {
          "l_suppkey": $l.l_suppkey,
          "l_extendedprice": $l.l_extendedprice,
          "l_discount": $l.l_discount,
          "l_quantity": $l.l_quantity,
          "l_partkey": $l.l_partkey,
          "l_orderkey": $o.o_orderkey, //$l.l_orderkey,
          "n_name": $s1.n_name
        }
      ) //l1
      where $ps.ps_suppkey = $l1.l_suppkey and $ps.ps_partkey = $l1.l_partkey   
    
      return {
        "l_extendedprice": $l1.l_extendedprice,
        "l_discount": $l1.l_discount,
        "l_quantity": $l1.l_quantity,
        "l_partkey": $l1.l_partkey,
        "l_orderkey": $l1.l_orderkey,
        "n_name": $l1.n_name,
        "ps_supplycost": $ps.ps_supplycost
      }
    ) //l2
    where contains($p.p_name, 'green') and $p.p_partkey = $l2.l_partkey    
    return {
      "l_extendedprice": $l2.l_extendedprice,
      "l_discount": $l2.l_discount,
      "l_quantity": $l2.l_quantity,
      "l_orderkey": $l2.l_orderkey,
      "n_name": $l2.n_name,
      "ps_supplycost": $l2.ps_supplycost
    }
  ) //l3
  where $o.o_orderkey = $l3.l_orderkey
  let $amount := $l3.l_extendedprice * (1 - $l3.l_discount) -  
$l3.ps_supplycost * $l3.l_quantity 
  let $o_year := get-year($o.o_orderdate)
  return {
    "nation": $l3.n_name,
    "o_year": $o_year,
    "amount": $amount
  }
) //profit
group by $nation := $profit.nation, $o_year := $profit.o_year with $profit
order by $nation, $o_year desc
return {
  "nation": $nation, 
  "o_year": $o_year, 
  "sum_profit": sum( for $pr in $profit return $pr.amount )
}

//Here is the Schema

create type NestedLineItemType as {
  l_partkey: int64,
  l_suppkey: int64,
  l_linenumber: int32,
  l_quantity: int32,
  l_extendedprice: double,
  l_discount: double,
  l_tax: double,
  l_returnflag: string,
  l_linestatus: string,
  l_shipdate: string,
  l_commitdate: string,
  l_receiptdate: string,
  l_shipinstruct: string,
  l_shipmode: string,
  l_comment: string
}

create type NestedOrderType as {
  o_orderkey: int64,
  o_custkey: int64,
  o_orderstatus: string,
  o_totalprice: double,
  o_orderdate: string,
  o_orderpriority: string,
  o_clerk: string,
  o_shippriority: int32,
  o_comment: string,
  o_lineitems: [ NestedLineItemType ]
}

create type CustomerType as {
  c_custkey: int64,
  c_name: string,
  c_address: string,
  c_nationkey: int32,
  c_phone: string,
  c_acctbal: double,
  c_mktsegment: string,
  c_comment: string
}

create type PartType as {
  p_partkey: int64, 
  p_name: string,
  p_mfgr: string,
  p_brand: string,
  p_type: string,
  p_size: int32,
  p_container: string,
  p_retailprice: double,
  p_comment: string
}

create type PartSuppType as {
  ps_partkey: int64,
  ps_suppkey: int64,
  ps_availqty: int32,
  ps_supplycost: double,
  ps_comment: string
}

create type SupplierType as {
  s_suppkey: int64,
  s_name: string,
  s_address: string,
  s_nationkey: int32,
  s_phone: string,
  s_acctbal: double,
  s_comment: string
}

create type NationType as {
  n_nationkey: int32,
  n_name: string,
  n_regionkey: int32,
  n_comment: string
}

create type RegionType as {
  r_regionkey: int32,
  r_name: string,
  r_comment: string
}

create dataset NestedOrders(NestedOrderType)  primary key o_orderkey;
create dataset Customer(CustomerType) primary key c_custkey;
create dataset Part(PartType)         primary key p_partkey;
create dataset Partsupp(PartSuppType) primary key ps_partkey, ps_suppkey;
create dataset Supplier(SupplierType) primary key s_suppkey;
create dataset Region(RegionType)     primary key r_regionkey;
create dataset Nation(NationType)     primary key n_nationkey;

create index nation_fk_region on Nation(n_regionkey);
create index supplier_fk_nation on Supplier (s_nationkey);
create index partsupp_fk_part on Partsupp (ps_partkey);
create index partsupp_fk_supplier on Partsupp (ps_suppkey);
create index customer_fk_nation on Customer (c_nationkey);
create index nestedOrders_fk_customer on NestedOrders (o_custkey);
create index nestedOrders_orderdateIx on NestedOrders (o_orderdate);



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

Reply via email to