Return-Path: X-Original-To: apmail-hive-user-archive@www.apache.org Delivered-To: apmail-hive-user-archive@www.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id BAE04177A0 for ; Sun, 5 Apr 2015 10:26:13 +0000 (UTC) Received: (qmail 24937 invoked by uid 500); 5 Apr 2015 10:26:12 -0000 Delivered-To: apmail-hive-user-archive@hive.apache.org Received: (qmail 24865 invoked by uid 500); 5 Apr 2015 10:26:12 -0000 Mailing-List: contact user-help@hive.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: user@hive.apache.org Delivered-To: mailing list user@hive.apache.org Received: (qmail 24855 invoked by uid 99); 5 Apr 2015 10:26:11 -0000 Received: from nike.apache.org (HELO nike.apache.org) (192.87.106.230) by apache.org (qpsmtpd/0.29) with ESMTP; Sun, 05 Apr 2015 10:26:11 +0000 X-ASF-Spam-Status: No, hits=-0.7 required=5.0 tests=RCVD_IN_DNSWL_LOW,SPF_PASS X-Spam-Check-By: apache.org Received-SPF: pass (nike.apache.org: domain of sanjiv.is.on@gmail.com designates 209.85.212.178 as permitted sender) Received: from [209.85.212.178] (HELO mail-wi0-f178.google.com) (209.85.212.178) by apache.org (qpsmtpd/0.29) with ESMTP; Sun, 05 Apr 2015 10:25:46 +0000 Received: by wiaa2 with SMTP id a2so9261018wia.0 for ; Sun, 05 Apr 2015 03:25:45 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:reply-to:in-reply-to:references:date:message-id :subject:from:to:content-type:content-transfer-encoding; bh=aQfVLq2EpKz5KB+pymdRSx19NsdFFHDtlMmwB0BeXQc=; b=oxCOo/NmnjUvM0jASO896ZGuydE4s+0R4TI50GQ9lq4uHv/EGYrwNMC9g7rR9q9H1y U+xRs840kzmV+AJWbItqaigHSWaR6eXM+Ra+CZ5OxbZWh66D3jnBQREq/AR3do5loQwb l3UhsuLPh2s0SJsq+tYHWbhj5QtIqCN/jthrXYz6KHMUnLc5XA4t1rsjtl4rkbfaD/T5 2hopmL+MCAhb+dLXiaDJggYkqM9Jafq2+RrLVyU0biW2LydeEvQwGUUfZtawQxHjZn7H r4gW/hcghR7lErahLoH3Zy9A3ilKNla6dSa093Ta0Yp97GeicIIzl+fl+mzUDMmNeaNp PbWA== MIME-Version: 1.0 X-Received: by 10.180.89.34 with SMTP id bl2mr21290055wib.23.1428229545526; Sun, 05 Apr 2015 03:25:45 -0700 (PDT) Received: by 10.194.66.105 with HTTP; Sun, 5 Apr 2015 03:25:45 -0700 (PDT) Reply-To: sanjiv.is.on@gmail.com In-Reply-To: References: Date: Sun, 5 Apr 2015 15:55:45 +0530 Message-ID: Subject: Re: Is it possible to do a LEFT JOIN LATERAL in Hive? From: "@Sanjiv Singh" To: user@hive.apache.org Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable X-Virus-Checked: Checked by ClamAV on apache.org -- create table lhs create table lhs ( subject_id int, date_time BIGINT ); -- insert some records in table lhs , named insertion will not work in case of hive insert into table lhs select 1,1000 from tmpTableWithOneRecords limit 1; insert into table lhs select 1,1100 from tmpTableWithOneRecords limit 1; insert into table lhs select 1,2000 from tmpTableWithOneRecords limit 1; insert into table lhs select 2,1002 from tmpTableWithOneRecords limit 1; insert into table lhs select 2,1998 from tmpTableWithOneRecords limit 1; create table events ( subject_id int, date_time BIGINT, event_val int ); insert into table events select 1,999, 1 from tmpTableWithOneRecords limit 1; insert into table events select 1,1000, 2 from tmpTableWithOneRecords limit 1; insert into table events select 1,1001, 3 from tmpTableWithOneRecords limit 1; insert into table events select 1,1999, 4 from tmpTableWithOneRecords limit 1; insert into table events select 1,2000, 5 from tmpTableWithOneRecords limit 1; insert into table events select 1,2001, 6 from tmpTableWithOneRecords limit 1; insert into table events select 2,999, 10 from tmpTableWithOneRecords limit 1; insert into table events select 2,1000, 20 from tmpTableWithOneRecords limit 1; insert into table events select 2,1001, 30 from tmpTableWithOneRecords limit 1; insert into table events select 2,1999, 40 from tmpTableWithOneRecords limit 1; insert into table events select 2,2000, 50 from tmpTableWithOneRecords limit 1; insert into table events select 2,2001, 60 from tmpTableWithOneRecords limit 1; select subject_id,adate,SUM(event_val),COUNT(event_val) from (SELECT a.subject_id as subject_id ,a.date_time as adate , b.date_time as bdate , b.event_val as event_val FROM events b LEFT OUTER JOIN lhs a ON b.subject_id =3D a.subject_id) abc where bdate < adate group by subject_id,adate; =09 1 1000 1 1 1 1100 6 3 1 2000 10 4 2 1002 60 3 2 1998 60 3 On 4/5/15, Jeremy Davis wrote: > Hello! > I would like to do a LEFT JOIN LATERAL .. Which is using values on the LH= S > 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 > ); > > =E2=80=94Subjects 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 =3D lhs.subject_id ) rhs1 ON true; > > > insert into events (subject_id, date_time, event_val) values (1,99= 9, > 1); > insert into events (subject_id, date_time, event_val) values (1,10= 00, > 2); > insert into events (subject_id, date_time, event_val) values (1,10= 01, > 3); > insert into events (subject_id, date_time, event_val) values (1,19= 99, > 4); > insert into events (subject_id, date_time, event_val) values (1,20= 00, > 5); > insert into events (subject_id, date_time, event_val) values (1,20= 01, > 6); > > insert into events (subject_id, date_time, event_val) values (2,99= 9, > 10); > insert into events (subject_id, date_time, event_val) values (2,10= 00, > 20); > insert into events (subject_id, date_time, event_val) values (2,10= 01, > 30); > insert into events (subject_id, date_time, event_val) values (2,19= 99, > 40); > insert into events (subject_id, date_time, event_val) values (2,20= 00, > 50); > insert into events (subject_id, date_time, event_val) values (2,20= 01, > 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 =3D lhs.subject_id ) rhs1 ON true; > > =E2=80=94results: > 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 > > > --=20 Regards Sanjiv Singh Mob : +091 9990-447-339