drop dataverse tpch if exists;
create dataverse tpch;
use dataverse tpch;


create type OrderType as closed {
  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 nodegroup group1 if not exists on nc1, nc2;

create dataset Orders(OrderType)
  partitioned by key o_orderkey on group1;

load dataset Orders 
using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter" 
(("path"="nc1://data/tpch0.001/orders.tbl"),("format"="delimited-text"),("delimiter"="|")) pre-sorted;

create index idx_Orders_Custkey on Orders(o_custkey) ;

write output to nc1:"rttest/index_orders-index-custkey-conjunctive.adm";

for $o in dataset('Orders')
where
  $o.o_custkey = 40 and $o.o_totalprice > 150000.0
order by $o.o_orderkey
return {  
  "o_orderkey": $o.o_orderkey,
  "o_custkey": $o.o_custkey
}
