// 1010 query language
\l show.k
/ ops
load:{.m.M:[];."\\l ",x}
base:{K::!.m.M;d(b;T::x);$[K;(. .m.M){Z::+`d!y}':*.!K;::];}
link:{d(s(?;z);x;y^`d);}
asof:{d(s(bin;z);x;y^`d);}
willbe:{d({C[x]:$["g"=*$*y;(y;I);y]};x;y);}
sel:{$[`d~*x;K@:&&/'K x;d({I@:&!p x;W::L::[]};x)];}
get:{$[K;,/;::]d({+u!c'u:$[x~`;!C;x]};x)}
set:{d({!(;x;y)};x;y);}
tabu:{n$[K;r;a][x;y]z]}
/ map-reduce
m:{,/$[b;d,/:';{x}]0 key'.m.M[d:#[!.m.M;c#x;()]]2:({#[!x]. y};T;((c:`d in*x)_x;(b:`d~*y)_y;z))}
r:{#[#[m[x;y]n!k;();$[`a=@y;!y;y,:()];n!V[*:'k],'n];();f[k!n:`$$!#k:?,/v'a]'a:u'z]}
/ reductions
U:(avg;var;dev)!({(%;(sum;x);(count;x))};{({(x%z)-y*y%:z};(sum;(*;x;x));(sum;x);(count;x))};{(%:;(var;x))})
u:{$[@x;x;f:U@*x;u'f . 1_x;u'x]}
V!:V:(last;sum;min;max);V,:(count;?:)!(sum;?,/)
v:{$[@x;();V@*x;,x;,/v'x]}
f:{$[@y;y;n:x y;n;f[x]'y]}
/ distribute, base, new, aggregate
d:{$[K;.m.M[K]2:x;. x]}
b:{G::W::L::[];I::!#!*C::(!+!x)!T::x}
N:0;n:{!(;T::`$($T),$N+:1;,0 key x);.m.M::[];base T}
a:{#[+u!c'u:?,//{$[`n=@x;x;x~*x;();,/.z.f'1_x]}''(y;z);x;y;z]}
/ column, set link, link, willbe, gfunction, parse
c:{$[`n=@c:C x;(!c)[x]I;`n=@*c;(!*c)[x]l . c;2=#c;(g[x]. c)I;w[x]c]}
s:{C::@[C;(!+!y)^!C;:[;(y;$[`N=@z,:();(z;z);z];x)]]}
l:{u:{+(`$$!#x)!x};$[x in!L;L x;L[x]:z[0][(u@{$[y;x@&x y;x]}[!x;z 1]'*y);u@(!p@)'y 1]]}
w:{$[x in!W;W x;W[x]:!p y]}
g:{$[x in!G;G x;/[i:I;I::z;G[x]:!p y;I::i;G[x]i?I]]}
p:{$[`n=@x;(c;,x);1=#x;x;~#x;();@[x;1_!#x;p]]}
/ g-functions ..
gsum:{@[z;i;:;+/'(y*z)i:.=x]}
gcumsum:{@[z;i;:;+\'(y*z)i:.=x]}
/ parallel-distributed db
load"t/" ;base`t;tabu[();`f!`f;[a:!"sum g";b:!"sum h";c:!"avg h"]];s1:get`
load"tq/";base`q;tabu[();`d`s!`d`s;[r:!"last b"]];tabu[();`s!`s;[t:!"last r"]];r1:get`
load"tq/";base`q;tabu[();`d`s!`d`s;[r:!"last b"]];r2:get`
load"tq/";base`t;tabu[();`d`s`e!`d`s`e;[r:!"max p"]];r3:get`
load"tq/";base`t;tabu[();`d`s`h!(`d;`s;!"`h$t");[r:!"sum z"]];r4:get`
load"tq/";base`t;sel@!"s=`CSCO";asof[`q;`d`s`t]();sel@!"p
\
\
\cd k
t1:+ [f:1 1 1 2 2 3 3 3;g:10*!8;k:1 0 1 1 0 1 0 0]
t2:+ [f:4 4 4 4 5;g:100*!5;k:1 1 1 0 0]
"../k/0"1:`t!(+`d!0),/:t1
"../k/1"1:`t!(+`d!0),/:t2
\cd ..
\l k/
q:+ [d:0 0 0 1 1;f:1 2 3 4 5;n:`a`b`c`d`e]
base`t
set[`q;,q]
link[`q;`d`f;()]
get`
\
t:+ [f:1 1 1 2 2 3 3 3;g:10*!8;k:1 0 1 1 0 1 0 0]
q:+ [f:1 2 3;n:`a`b`c]
base`t
link[`q;,`f]()
get`
\
t:+ [f:1 1 1 2 2 3 3 3;g:10*!8;k:1 0 1 1 0 1 0 0]
base`t
willbe[`h;!"gsum[f;f<3;g]"]
willbe[`j;!"gcumsum[f;f<3;g]"]
willbe[`i;!"f+1"]
sel@!"k>0"
get`