54 lines
2.4 KiB
Plaintext
54 lines
2.4 KiB
Plaintext
# create arrays
|
|
|
|
let LINEITEM2 = LINEITEM feed consume;
|
|
|
|
let LINEITEM_25 = LINEITEM feed extend[Pkg: seqnext() mod 25] distribute[Pkg];
|
|
let LINEITEM_50 = LINEITEM feed extend[Pkg: seqnext() mod 50] distribute[Pkg];
|
|
let LINEITEM_100 = LINEITEM feed extend[Pkg: seqnext() mod 100] distribute[Pkg];
|
|
let LINEITEM_200 = LINEITEM feed extend[Pkg: seqnext() mod 200] distribute[Pkg];
|
|
|
|
let ORDERS_25 = ORDERS feed extend[Pkg: seqnext() mod 25] distribute[Pkg];
|
|
let ORDERS_50 = ORDERS feed extend[Pkg: seqnext() mod 50] distribute[Pkg];
|
|
|
|
let CUSTOMER_25 = CUSTOMER feed extend[Pkg: seqnext() mod 25] distribute[Pkg];
|
|
let CUSTOMER_50 = CUSTOMER feed extend[Pkg: seqnext() mod 50] distribute[Pkg];
|
|
|
|
# create a btree for L_PARTKEY
|
|
|
|
let LINEITEM_L_PARTKEY = LINEITEM createbtree[L_PARTKEY];
|
|
let LINEITEM_L_PARTKEY_25 = LINEITEM_25 loop[. createbtree[L_PARTKEY]];
|
|
|
|
|
|
# create arrays of relations with special join selectivities
|
|
|
|
query seqinit(1);
|
|
#increment L_ModNr every 100 tuples
|
|
let LINEITEM_TMP = LINEITEM feed extend[L_ModNr: seqnext() div 100] consume;
|
|
#distribute values L_JoinKey between 0..L_ModNr. L_ModNr changes every 100 tuples
|
|
let LINEITEM_J1 = LINEITEM_TMP feed extend[L_IsOne: 1, L_JoinKey: seqnext() mod (.L_ModNr + 1) ] consume;
|
|
|
|
query seqinit(1);
|
|
# create an array. Put every 50 tuples in a new slot
|
|
let LINEITEM_J1_A = LINEITEM_J1 feed extend[Pkg: (seqnext() div 100)] distribute[Pkg];
|
|
|
|
# compute selectivity per slot
|
|
query LINEITEM_J1_A loop[ . feed . feed {x} hashjoin[L_JoinKey, L_JoinKey_x, 101] count / (. count * . count)];
|
|
|
|
# compute selectivity with LINEITEM_J1
|
|
query LINEITEM_J1_A loop[ . feed LINEITEM_J1 feed {x} hashjoin[L_JoinKey, L_JoinKey_x, 101] count / (. count * LINEITEM_J1 count)];
|
|
|
|
# overall selectivity for equi join on L_JoinKey
|
|
query LINEITEM_J1 feed LINEITEM_J1 feed {x} hashjoin[L_JoinKey, L_JoinKey_x, 101] count / (LINEITEM_J1 count * LINEITEM_J1 count);
|
|
# selectivity for equi join on L_PARTKEY
|
|
query LINEITEM feed LINEITEM feed {x} hashjoin[L_PARTKEY, L_PARTKEY_x, 101] count / (LINEITEM count * LINEITEM count);
|
|
# selectivity for non equi join (>=) on L_PARTKEY
|
|
#query LINEITEM feed LINEITEM feed {x} symmproduct[.L_PARTKEY >= ..L_PARTKEY_x] count / (LINEITEM count * LINEITEM count);
|
|
|
|
|
|
let LINEITEM_J1_L_JoinKey = LINEITEM_J1 createbtree[L_JoinKey];
|
|
|
|
|
|
# Expensive user defined functions
|
|
|
|
let fx2 = fun(n: int) LINEITEM feed LINEITEM feed {x} symmproduct[ .L_PARTKEY = ..L_PARTKEY_x ] head[n] count
|