Hello!
I would like to do a LEFT JOIN LATERAL .. Which is using values on the LHS as
parameters on the RHS. Is this sort of thing possible in Hive?
-JD
---- Some example SQL:
create table lhs (
subject_id integer,
date_time BIGINT
);
—Subjects and responses at Arbitrary response times:
insert into lhs (subject_id, date_time) values (1,1000);
insert into lhs (subject_id, date_time) values (1,1100);
insert into lhs (subject_id, date_time) values (1,2000);
insert into lhs (subject_id, date_time) values (2,1002);
insert into lhs (subject_id, date_time) values (2,1998);
create table events (
subject_id integer,
date_time BIGINT,
event_val integer
);
SELECT * from lhs LEFT JOIN LATERAL ( select SUM(event_val) as val_sum,
count(event_val) as ecnt from events WHERE date_time < lhs.date_time and
subject_id = lhs.subject_id ) rhs1 ON true;
insert into events (subject_id, date_time, event_val) values (1,999, 1);
insert into events (subject_id, date_time, event_val) values (1,1000, 2);
insert into events (subject_id, date_time, event_val) values (1,1001, 3);
insert into events (subject_id, date_time, event_val) values (1,1999, 4);
insert into events (subject_id, date_time, event_val) values (1,2000, 5);
insert into events (subject_id, date_time, event_val) values (1,2001, 6);
insert into events (subject_id, date_time, event_val) values (2,999, 10);
insert into events (subject_id, date_time, event_val) values (2,1000,
20);
insert into events (subject_id, date_time, event_val) values (2,1001,
30);
insert into events (subject_id, date_time, event_val) values (2,1999,
40);
insert into events (subject_id, date_time, event_val) values (2,2000,
50);
insert into events (subject_id, date_time, event_val) values (2,2001,
60);
SELECT * from lhs LEFT JOIN LATERAL ( select SUM(event_val) as val_sum,
count(event_val) as ecnt from events WHERE date_time < lhs.date_time and
subject_id = lhs.subject_id ) rhs1 ON true;
—results:
subject_id;date_time;val_sum;ecnt
1;1000;1;1
1;1100;6;3
1;2000;10;4
2;1002;60;3
2;1998;60;3