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 654FD1830C for ; Wed, 9 Mar 2016 00:10:04 +0000 (UTC) Received: (qmail 83681 invoked by uid 500); 9 Mar 2016 00:10:02 -0000 Delivered-To: apmail-hive-user-archive@hive.apache.org Received: (qmail 83608 invoked by uid 500); 9 Mar 2016 00:10:02 -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 83592 invoked by uid 99); 9 Mar 2016 00:10:02 -0000 Received: from pnap-us-west-generic-nat.apache.org (HELO spamd2-us-west.apache.org) (209.188.14.142) by apache.org (qpsmtpd/0.29) with ESMTP; Wed, 09 Mar 2016 00:10:02 +0000 Received: from localhost (localhost [127.0.0.1]) by spamd2-us-west.apache.org (ASF Mail Server at spamd2-us-west.apache.org) with ESMTP id 03D4A1A031A for ; Wed, 9 Mar 2016 00:10:02 +0000 (UTC) X-Virus-Scanned: Debian amavisd-new at spamd2-us-west.apache.org X-Spam-Flag: NO X-Spam-Score: 1.179 X-Spam-Level: * X-Spam-Status: No, score=1.179 tagged_above=-999 required=6.31 tests=[DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, HTML_MESSAGE=2, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H3=-0.01, RCVD_IN_MSPIKE_WL=-0.01, SPF_PASS=-0.001] autolearn=disabled Authentication-Results: spamd2-us-west.apache.org (amavisd-new); dkim=pass (2048-bit key) header.d=gmail.com Received: from mx1-lw-us.apache.org ([10.40.0.8]) by localhost (spamd2-us-west.apache.org [10.40.0.9]) (amavisd-new, port 10024) with ESMTP id VGpT5opu-8nR for ; Wed, 9 Mar 2016 00:10:00 +0000 (UTC) Received: from mail-lb0-f169.google.com (mail-lb0-f169.google.com [209.85.217.169]) by mx1-lw-us.apache.org (ASF Mail Server at mx1-lw-us.apache.org) with ESMTPS id 8E5535FBCE for ; Wed, 9 Mar 2016 00:09:59 +0000 (UTC) Received: by mail-lb0-f169.google.com with SMTP id xr8so40523879lbb.1 for ; Tue, 08 Mar 2016 16:09:59 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:in-reply-to:references:date:message-id:subject:from:to; bh=vxei7u8/js/ZnIe8BxhRy5CKieFiTsYEDu/g50joszI=; b=Kb1ScGFxMOtjEiSZf3IpObPzxsA0dIWOj/V4bOX082YV3abnAGv5yM7gTruqu2sINf D788lXPiW+WJ7W/CrGZaFHfJcQrlLLoxTBMQKpQIyqNoOY6WAztU1w8yT1v3dt8OA3yd CMtrMbIFIRGKXIudnJrdwjoEmxHRn7FFmnWM4HEjsDtWFe5OmclAgxmLC0oJGSpMHHaf p3iJB4JJJIGx8wF4tMFwrNcIasmEG9pi+J25XR8y84Uho8CQhbkQLW23GT+9gXh94d7e +sjxGMxmZQtT7Q7vNIIxjIk2RiUho2udTyH8D66GpkKO76ZmeesRznDEELssJWQqm0nf 59Jg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:mime-version:in-reply-to:references:date :message-id:subject:from:to; bh=vxei7u8/js/ZnIe8BxhRy5CKieFiTsYEDu/g50joszI=; b=Dg2VLCPa6/7xcwllOajcOOw1YZx82nyz/Ij6ywx/6/sLXV4Arm3HMrhUp/idbj5Y0j aa3QM9d0PN21HC/rPaH+8V167UZ9jXWuY6xSdO/8StJCDTCvP7UbU5zEysxUS4hoUfJx 3/Fz8PP9Vw3HqHvPj+EHbn3Ood+yN6UVVlF20d7o9G+huftCs7w2BCxaycY1MeYQh5m8 M6KoIZ9LNCo3hhhZkGOdkhdge929qR8jiNVEXa+Cy5GZ/aZhnxRK733OiKSRa0YtzTSy 7iaMf0AlpKkVeqLxq8aiOCygDmwNQOKRmJT74eELis/R1cyvn7c6kMyzb0HdtXisnaSv tz4A== X-Gm-Message-State: AD7BkJKtxMp/Hoy90JnLkcVdXtAAcI6d6gRLVULVao+nptxPe7TjflyBQmQaGd/G8/+Wl8msXSontbCbj6GoiA== MIME-Version: 1.0 X-Received: by 10.112.160.199 with SMTP id xm7mr8372219lbb.32.1457482198211; Tue, 08 Mar 2016 16:09:58 -0800 (PST) Received: by 10.25.154.83 with HTTP; Tue, 8 Mar 2016 16:09:57 -0800 (PST) In-Reply-To: References: Date: Tue, 8 Mar 2016 19:09:57 -0500 Message-ID: Subject: Re: Simple UDFS and IN Operator From: Edward Capriolo To: "user@hive.apache.org" Content-Type: multipart/related; boundary=001a11c3869ab105e4052d928490 --001a11c3869ab105e4052d928490 Content-Type: multipart/alternative; boundary=001a11c3869ab105df052d92848f --001a11c3869ab105df052d92848f Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable The IN UDF is a special one in that unlike many others there is support in the ANTLR language and parsers for it. The rough answer is it can be done but it is not as direct as making other UDFs. On Tue, Mar 8, 2016 at 2:32 PM, Lavelle, Shawn wrote: > Hello All, > > I hope that this question isn=E2=80=99t too rudimentary =E2=80=93 but = I=E2=80=99m relatively > new to HIVE. > > > > In Hive 0.11, I=E2=80=99ve written a UDF that returns a list of Intege= rs. I=E2=80=99d > like to use this in a WHERE clause of a query, something like SELECT * FR= OM > WHERE in ( getList() ). (Extra parenthesis needed to pass > the parser.) Is such a thing possible? Keying in values for the list > parameter works, but they have WritableConstantIntObjectInspectors wherea= s > what is returned by my list (despite my best efforts) has an element > inspector of WritabeIntObjectInspector. This doesn=E2=80=99t work. > > So, two questions =E2=80=93 Should It? (The HIVE I=E2=80=99m working on= is heavily > modified :/ ) and how might I accomplish this? Joins would be ideal, but > we haven=E2=80=99t upgraded yet. > > Thank you for your insight, > > > > ~ Shawn M Lavelle > > > > > > > Shawn Lavelle > Software Development > > 4101 Arrowhead Drive > Medina, Minnesota 55340-9457 > Phone: 763 551 0559 > Fax: 763 551 0750 > *Email:* Shawn.Lavelle@osii.com > *Website: **www.osii.com* > --001a11c3869ab105df052d92848f Content-Type: text/html; charset=UTF-8 Content-Transfer-Encoding: quoted-printable
The IN UDF is a special one in that unlike many others the= re is support in the ANTLR language and parsers for it. The rough answer is= it can be done but it is not as direct as making other UDFs.


On Tue, Ma= r 8, 2016 at 2:32 PM, Lavelle, Shawn <Shawn.Lavelle@osii.com><= /span> wrote:

Hello All,

=C2=A0=C2=A0 I hope that this question isn=E2=80=99t too rudim= entary =E2=80=93 but I=E2=80=99m relatively new to HIVE.

=C2=A0

=C2=A0=C2=A0 In Hive 0.11, I=E2=80=99ve written a UDF that ret= urns a list of Integers. I=E2=80=99d like to use this in a WHERE clause of = a query, something like SELECT * FROM <table> WHERE <col> =C2= =A0in ( getList() ). (Extra parenthesis needed to pass the parser.)=C2=A0 Is such a thing po= ssible?=C2=A0 Keying in values for the list parameter works, but they have = WritableConstantIntObjectInspectors whereas what is returned by my list (de= spite my best efforts) has an element inspector of WritabeIntObjectInspector. This doesn=E2=80=99t work.=C2=A0

=C2=A0=C2=A0So, two questions =E2=80=93 Should It? (The HIVE I=E2=80=99m wo= rking on is heavily modified :/ ) and how might I accomplish this?=C2=A0 Jo= ins would be ideal, but we haven=E2=80=99t upgraded yet.

=C2=A0 Thank you for your insight,

=C2=A0

~ Shawn M Lavelle

=C2=A0





Shawn=C2=A0Lavelle
<= span style=3D"font-family:Arial;font-size:xx-small;color:#666666">Software = Development

4101 Arrowhead Drive
Medina, Minnesota 55340-9457
Phone: 763 551 0559
<= /span>Fax: 763 551 0750
Email:
Shawn.Lavelle@osii.com
Website: www.osii.com


--001a11c3869ab105df052d92848f-- --001a11c3869ab105e4052d928490 Content-Type: image/gif; name="image641033.GIF" Content-Disposition: inline; filename="image641033.GIF" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: bcf49d91987aa1af_0.1 R0lGODlhewFjAPcAAAAAAAAAMwAAZgAAmQAAzAAA/wArAAArMwArZgArmQArzAAr/wBVAABVMwBV ZgBVmQBVzABV/wCAAACAMwCAZgCAmQCAzACA/wCqAACqMwCqZgCqmQCqzACq/wDVAADVMwDVZgDV mQDVzADV/wD/AAD/MwD/ZgD/mQD/zAD//zMAADMAMzMAZjMAmTMAzDMA/zMrADMrMzMrZjMrmTMr zDMr/zNVADNVMzNVZjNVmTNVzDNV/zOAADOAMzOAZjOAmTOAzDOA/zOqADOqMzOqZjOqmTOqzDOq /zPVADPVMzPVZjPVmTPVzDPV/zP/ADP/MzP/ZjP/mTP/zDP//2YAAGYAM2YAZmYAmWYAzGYA/2Yr AGYrM2YrZmYrmWYrzGYr/2ZVAGZVM2ZVZmZVmWZVzGZV/2aAAGaAM2aAZmaAmWaAzGaA/2aqAGaq M2aqZmaqmWaqzGaq/2bVAGbVM2bVZmbVmWbVzGbV/2b/AGb/M2b/Zmb/mWb/zGb//5kAAJkAM5kA ZpkAmZkAzJkA/5krAJkrM5krZpkrmZkrzJkr/5lVAJlVM5lVZplVmZlVzJlV/5mAAJmAM5mAZpmA mZmAzJmA/5mqAJmqM5mqZpmqmZmqzJmq/5nVAJnVM5nVZpnVmZnVzJnV/5n/AJn/M5n/Zpn/mZn/ zJn//8wAAMwAM8wAZswAmcwAzMwA/8wrAMwrM8wrZswrmcwrzMwr/8xVAMxVM8xVZsxVmcxVzMxV /8yAAMyAM8yAZsyAmcyAzMyA/8yqAMyqM8yqZsyqmcyqzMyq/8zVAMzVM8zVZszVmczVzMzV/8z/ AMz/M8z/Zsz/mcz/zMz///8AAP8AM/8AZv8Amf8AzP8A//8rAP8rM/8rZv8rmf8rzP8r//9VAP9V M/9VZv9Vmf9VzP9V//+AAP+AM/+AZv+Amf+AzP+A//+qAP+qM/+qZv+qmf+qzP+q///VAP/VM//V Zv/Vmf/VzP/V////AP//M///Zv//mf//zP///wAAAAAAAAAAAAAAACH/C05FVFNDQVBFMi4wAwEB AAAh+QQBAAD/ACwAAAAAewFjAAAI/wD3CRxIsKDBgwgTKtwXjWG0hw0XSpxIsaLFixgzatzIsaPH jyBDilTYEOKyaKdORjvJEmLEkTBjypxJs6bNmzglllwZLVTPn6GWLUu5kqhKkz8f5lzKtKnTp1Cj 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 S0sKCAA7 --001a11c3869ab105e4052d928490--