You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user@drill.apache.org by Nirav Shah <ni...@games24x7.com> on 2016/01/06 08:58:50 UTC

Issue in developing UDF

Hi ,


I am trying to extract info from user agent using WURFL libraries.

I am not sure what's wrong I am doing here but it's not working and not
giving any errors as well.

I have put wurfl.xml in source folder and  wurfl<version>.jar to
/jar/3rdparty/

*Code :*

        wurfl = new
net.sourceforge.wurfl.core.GeneralWURFLEngine("wurfl.xml");
            String SUA =
org.apache.drill.exec.expr.fn.impl.StringFunctionHelpers.toStringFromUTF8(userAgent.start,
userAgent.end, userAgent.buffer);


            String[] capabilities = {
                    "device_os",
                    "device_os_version",
                    "is_tablet",
                    "is_wireless_device",
                    "pointing_method",
                    "preferred_markup",
                    "resolution_height",
                    "resolution_width",
                    "ux_full_desktop",
                    "xhtml_support_level",
                    "is_smarttv",
                    "can_assign_phone_number",
                    "brand_name",
                    "model_name",
                    "marketing_name",
                    "mobile_browser_version"
                };
            wurfl.setEngineTarget(EngineTarget.accuracy);
            wurfl.setCapabilityFilter(capabilities);
            Device device = wurfl.getDeviceForRequest(SUA);
            System.out.println("4-->"+new Date(
System.currentTimeMillis()));
            System.out.println("Device OS: " +
device.getCapability("device_os"));
            System.out.println("Device OS version: " +
device.getCapability("device_os_version"));
            System.out.println("Brand name: " +
device.getCapability("brand_name"));
            System.out.println("advertised_device_os_version: " +
device.getCapability("advertised_device_os_version"));
            System.out.println("advertised_device_os: " +
device.getCapability("advertised_device_os"));
            System.out.println("advertised_browser: " +
device.getCapability("advertised_browser"));

System.out.println("advertised_browser_version:"+device.getCapability("advertised_browser_version"));
            stringOutValue = device.getCapability("device_os_version");


Regards,
Nirav

Re: Issue in developing UDF

Posted by Abdel Hakim Deneche <ad...@maprtech.com>.
Hey Nirav,

Drill may be hitting some error when trying to load the UDF, try looking in
drillbits.log for error messages when the Drillbit starts up.

On Sun, Jan 10, 2016 at 9:38 PM, Nirav Shah <ni...@games24x7.com>
wrote:

> Hi Nathan,
> No luck. this is also not working.
> 😢😢
>
> regards,
> Nirav
>
> On Mon, Jan 11, 2016 at 12:56 AM, Nathan Griffith <ng...@dremio.com>
> wrote:
>
> > Hi Nirav,
> >
> > No problem!
> >
> > Your 'src/main/resources/drill-module.conf' file should look like this:
> >
> > drill {
> >   classpath.scanning {
> >     packages : ${?drill.classpath.scanning.packages} [
> >       com.yourgroupidentifier.udf
> >     ]
> >   }
> > }
> >
> > where 'com.yourgroupidentifier.udf' should be your package identifier.
> >
> > The first part of this blog post can give you more context if you feel
> > like you need it:
> >
> >
> >
> http://www.dremio.com/blog/querying-google-analytics-json-with-a-custom-sql-function/
> >
> > Best,
> > Nathan
> >
> > On Sat, Jan 9, 2016 at 6:40 AM, Nirav Shah <ni...@games24x7.com>
> > wrote:
> > > Thanks Nathan for spending time on this issue.
> > >
> > > I have just put blank file in project.
> > > Do I need to write something in this file?
> > > On Jan 8, 2016 10:23 PM, "Nathan Griffith" <ng...@dremio.com>
> wrote:
> > >
> > >> Hi again Nirav,
> > >>
> > >> Yup that looks like Drill just isn't finding the function. Do you have
> > >> a '/src/main/resources/drill-module.conf' file set up in your Maven
> > >> project for the UDF? If so, could you paste the text here?
> > >>
> > >> Best,
> > >> Nathan
> > >>
> > >> On Thu, Jan 7, 2016 at 11:03 PM, Nirav Shah <nirav.shah@games24x7.com
> >
> > >> wrote:
> > >> > Sorry for delayed response.
> > >> >
> > >> > @Abdel,
> > >> > I have put both jars in 3rdparty jars. My other UDFs are working
> fine.
> > >> >
> > >> > @Nathan
> > >> > I tried this still same issue.
> > >> >
> > >> > May be I am doing some silly mistake.
> > >> >
> > >> > *Complete Code :*
> > >> >
> > >> > package com.games24x7.drill;
> > >> >
> > >> > import java.util.Date;
> > >> >
> > >> > import javax.inject.Inject;
> > >> >
> > >> > import org.apache.drill.exec.expr.DrillSimpleFunc;
> > >> > import org.apache.drill.exec.expr.annotations.FunctionTemplate;
> > >> > import org.apache.drill.exec.expr.annotations.Output;
> > >> > import org.apache.drill.exec.expr.annotations.Param;
> > >> > import org.apache.drill.exec.expr.holders.IntHolder;
> > >> > import org.apache.drill.exec.expr.holders.NullableVarCharHolder;
> > >> > import org.apache.drill.exec.expr.holders.VarCharHolder;
> > >> >
> > >> > import io.netty.buffer.DrillBuf;
> > >> > import net.sourceforge.wurfl.core.Device;
> > >> > import net.sourceforge.wurfl.core.EngineTarget;
> > >> >
> > >> > @FunctionTemplate(name = "GetBrowserDtl", scope =
> > >> > FunctionTemplate.FunctionScope.SIMPLE, nulls =
> > >> > FunctionTemplate.NullHandling.NULL_IF_NULL)
> > >> > public  class BrowserFuncNew implements DrillSimpleFunc {
> > >> >
> > >> >     @Param
> > >> >     NullableVarCharHolder userAgent;
> > >> >     @Param
> > >> >     IntHolder option;
> > >> >     @Output
> > >> >     VarCharHolder outValue;
> > >> >     @Inject
> > >> >     DrillBuf buffer;
> > >> >     @Inject
> > >> >     net.sourceforge.wurfl.core.GeneralWURFLEngine wurfl;
> > >> >     public void setup() {
> > >> >         // TODO Auto-generated method stub
> > >> >         //wurfl = new
> > >> > net.sourceforge.wurfl.core.GeneralWURFLEngine("wurfl.xml");
> > >> >     }
> > >> >
> > >> >     public void eval() {
> > >> >         String stringOutValue = "null";
> > >> >
> > >> >         try {
> > >> >             wurfl = new
> > >> >
> > net.sourceforge.wurfl.core.GeneralWURFLEngine("/home/nirav/wurfl.xml");
> > >> >     //        String SUA =
> > >> >
> > >>
> >
> org.apache.drill.exec.expr.fn.impl.StringFunctionHelpers.toStringFromUTF8(userAgent.start,
> > >> > userAgent.end, userAgent.buffer);
> > >> >
> > >> >
> > >> > /*            String[] capabilities = {
> > >> >                     "device_os",
> > >> >                     "device_os_version",
> > >> >                     "is_tablet",
> > >> >                     "is_wireless_device",
> > >> >                     "pointing_method",
> > >> >                     "preferred_markup",
> > >> >                     "resolution_height",
> > >> >                     "resolution_width",
> > >> >                     "ux_full_desktop",
> > >> >                     "xhtml_support_level",
> > >> >                     "is_smarttv",
> > >> >                     "can_assign_phone_number",
> > >> >                     "brand_name",
> > >> >                     "model_name",
> > >> >                     "marketing_name",
> > >> >                     "mobile_browser_version"
> > >> >                 };
> > >> >             wurfl.setEngineTarget(EngineTarget.accuracy);
> > >> >             wurfl.setCapabilityFilter(capabilities);
> > >> >             Device device = wurfl.getDeviceForRequest(SUA);
> > >> >             System.out.println("4-->"+new Date(
> > >> > System.currentTimeMillis()));
> > >> >             System.out.println("Device OS: " +
> > >> > device.getCapability("device_os"));
> > >> >             System.out.println("Device OS version: " +
> > >> > device.getCapability("device_os_version"));
> > >> >             System.out.println("Brand name: " +
> > >> > device.getCapability("brand_name"));
> > >> >             System.out.println("advertised_device_os_version: " +
> > >> > device.getCapability("advertised_device_os_version"));
> > >> >             System.out.println("advertised_device_os: " +
> > >> > device.getCapability("advertised_device_os"));
> > >> >             System.out.println("advertised_browser: " +
> > >> > device.getCapability("advertised_browser"));
> > >> >
> > >> >
> > >>
> >
> System.out.println("advertised_browser_version:"+device.getCapability("advertised_browser_version"));
> > >> >             stringOutValue =
> > device.getCapability("device_os_version");
> > >> > */
> > >> >             byte[] valueDecoded = stringOutValue.getBytes();
> > >> >             outValue.buffer =
> > >> buffer.reallocIfNeeded(valueDecoded.length);
> > >> >             outValue.start = 0;
> > >> >             outValue.end = valueDecoded.length;
> > >> >             buffer.setBytes(0, valueDecoded);
> > >> >         } catch (Exception e) {
> > >> >             // TODO Auto-generated catch block
> > >> >             //stringOutValue = "null6";
> > >> >             byte[] valueDecoded = e.getMessage().getBytes();
> > >> >             outValue.buffer =
> > >> buffer.reallocIfNeeded(valueDecoded.length);
> > >> >             outValue.start = 0;
> > >> >             outValue.end = valueDecoded.length;
> > >> >             buffer.setBytes(0, valueDecoded);
> > >> >
> > >> >         }
> > >> >
> > >> >     }
> > >> > }
> > >> > // select GetBrowserDtl('Mozilla/5.0 (X11; Linux x86_64)
> > >> AppleWebKit/537.36
> > >> > (KHTML, like Gecko) Chrome/47.0.2526.80 Safari/537.36',1) from
> > >> (values(1));
> > >> > //select GetBrowserDtl('Mozilla/5.0 (X11; Ubuntu; Linux x86_64;
> > rv:31.0)
> > >> > Gecko/20100101 Firefox/31.0',1) from (values(1));
> > >> > //select GetBrowserDtl('Mozilla/5.0 (X11; Ubuntu; Linux x86_64;
> > rv:31.0)
> > >> > Gecko/20100101 Firefox/31.0',1) from (values(1));
> > >> >
> > >> > *Result:*
> > >> >
> > >> > 0: jdbc:drill:zk=local> select GetBrowserDtl('Mozilla/5.0 (X11;
> Linux
> > >> > x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.80
> > >> > Safari/537.36',1) from (values(1));
> > >> > Jan 08, 2016 12:14:17 PM
> > >> > org.apache.calcite.sql.validate.SqlValidatorException <init>
> > >> > SEVERE: org.apache.calcite.sql.validate.SqlValidatorException: No
> > match
> > >> > found for function signature GetBrowserDtl(<CHARACTER>, <NUMERIC>)
> > >> > Jan 08, 2016 12:14:17 PM org.apache.calcite.runtime.CalciteException
> > >> <init>
> > >> > SEVERE: org.apache.calcite.runtime.CalciteContextException: From
> line
> > 1,
> > >> > column 8 to line 1, column 130: No match found for function
> signature
> > >> > GetBrowserDtl(<CHARACTER>, <NUMERIC>)
> > >> > Error: VALIDATION ERROR: From line 1, column 8 to line 1, column
> 130:
> > No
> > >> > match found for function signature GetBrowserDtl(<CHARACTER>,
> > <NUMERIC>)
> > >> >
> > >> >
> > >> > [Error Id: 5a8c24d3-1b26-4dfd-be6d-615ba051ad1c on nirav:31010]
> > >> > (state=,code=0)
> > >> >
> > >> >
> > >> > On Thu, Jan 7, 2016 at 2:55 AM, Nathan Griffith <
> ngriffith@dremio.com
> > >
> > >> > wrote:
> > >> >
> > >> >> Hi Nirav!
> > >> >>
> > >> >> A couple thoughts: a.) To help troubleshoot, you may want to
> prepend
> > >> >> the full path of "wurfl.xml" in the first statement of your code,
> b.)
> > >> >> So when you try to use the UDF in a query you get absolutely no
> error
> > >> >> messages from Drill?
> > >> >>
> > >> >> Also, the first part of this article
> > >> >> (
> > >> >>
> > >>
> >
> http://www.dremio.com/blog/querying-google-analytics-json-with-a-custom-sql-function/
> > >> >> )
> > >> >> makes a good resource for telling Drill how to pick up on a new
> UDF.
> > >> >>
> > >> >> Best,
> > >> >> Nathan
> > >> >>
> > >> >> On Wed, Jan 6, 2016 at 10:23 AM, Abdel Hakim Deneche
> > >> >> <ad...@maprtech.com> wrote:
> > >> >> > According to Drill documentation:
> > >> >> >
> > >> >> > http://drill.apache.org/docs/adding-custom-functions-to-drill/
> > >> >> >
> > >> >> > You need to copy both class jar and source jar of your UDF to
> > >> >> > $DRILL_HOME/jars/3rdparty/
> > >> >> >
> > >> >> > did you do it ?
> > >> >> >
> > >> >> > On Tue, Jan 5, 2016 at 11:58 PM, Nirav Shah <
> > nirav.shah@games24x7.com
> > >> >
> > >> >> > wrote:
> > >> >> >
> > >> >> >> Hi ,
> > >> >> >>
> > >> >> >>
> > >> >> >> I am trying to extract info from user agent using WURFL
> libraries.
> > >> >> >>
> > >> >> >> I am not sure what's wrong I am doing here but it's not working
> > and
> > >> not
> > >> >> >> giving any errors as well.
> > >> >> >>
> > >> >> >> I have put wurfl.xml in source folder and  wurfl<version>.jar to
> > >> >> >> /jar/3rdparty/
> > >> >> >>
> > >> >> >> *Code :*
> > >> >> >>
> > >> >> >>         wurfl = new
> > >> >> >> net.sourceforge.wurfl.core.GeneralWURFLEngine("wurfl.xml");
> > >> >> >>             String SUA =
> > >> >> >>
> > >> >> >>
> > >> >>
> > >>
> >
> org.apache.drill.exec.expr.fn.impl.StringFunctionHelpers.toStringFromUTF8(userAgent.start,
> > >> >> >> userAgent.end, userAgent.buffer);
> > >> >> >>
> > >> >> >>
> > >> >> >>             String[] capabilities = {
> > >> >> >>                     "device_os",
> > >> >> >>                     "device_os_version",
> > >> >> >>                     "is_tablet",
> > >> >> >>                     "is_wireless_device",
> > >> >> >>                     "pointing_method",
> > >> >> >>                     "preferred_markup",
> > >> >> >>                     "resolution_height",
> > >> >> >>                     "resolution_width",
> > >> >> >>                     "ux_full_desktop",
> > >> >> >>                     "xhtml_support_level",
> > >> >> >>                     "is_smarttv",
> > >> >> >>                     "can_assign_phone_number",
> > >> >> >>                     "brand_name",
> > >> >> >>                     "model_name",
> > >> >> >>                     "marketing_name",
> > >> >> >>                     "mobile_browser_version"
> > >> >> >>                 };
> > >> >> >>             wurfl.setEngineTarget(EngineTarget.accuracy);
> > >> >> >>             wurfl.setCapabilityFilter(capabilities);
> > >> >> >>             Device device = wurfl.getDeviceForRequest(SUA);
> > >> >> >>             System.out.println("4-->"+new Date(
> > >> >> >> System.currentTimeMillis()));
> > >> >> >>             System.out.println("Device OS: " +
> > >> >> >> device.getCapability("device_os"));
> > >> >> >>             System.out.println("Device OS version: " +
> > >> >> >> device.getCapability("device_os_version"));
> > >> >> >>             System.out.println("Brand name: " +
> > >> >> >> device.getCapability("brand_name"));
> > >> >> >>             System.out.println("advertised_device_os_version: "
> +
> > >> >> >> device.getCapability("advertised_device_os_version"));
> > >> >> >>             System.out.println("advertised_device_os: " +
> > >> >> >> device.getCapability("advertised_device_os"));
> > >> >> >>             System.out.println("advertised_browser: " +
> > >> >> >> device.getCapability("advertised_browser"));
> > >> >> >>
> > >> >> >>
> > >> >> >>
> > >> >>
> > >>
> >
> System.out.println("advertised_browser_version:"+device.getCapability("advertised_browser_version"));
> > >> >> >>             stringOutValue =
> > >> device.getCapability("device_os_version");
> > >> >> >>
> > >> >> >>
> > >> >> >> Regards,
> > >> >> >> Nirav
> > >> >> >>
> > >> >> >
> > >> >> >
> > >> >> >
> > >> >> > --
> > >> >> >
> > >> >> > Abdelhakim Deneche
> > >> >> >
> > >> >> > Software Engineer
> > >> >> >
> > >> >> >   <http://www.mapr.com/>
> > >> >> >
> > >> >> >
> > >> >> > Now Available - Free Hadoop On-Demand Training
> > >> >> > <
> > >> >>
> > >>
> >
> http://www.mapr.com/training?utm_source=Email&utm_medium=Signature&utm_campaign=Free%20available
> > >> >> >
> > >> >>
> > >>
> >
>



-- 

Abdelhakim Deneche

Software Engineer

  <http://www.mapr.com/>


Now Available - Free Hadoop On-Demand Training
<http://www.mapr.com/training?utm_source=Email&utm_medium=Signature&utm_campaign=Free%20available>

Re: Issue in developing UDF

Posted by Nirav Shah <ni...@games24x7.com>.
Hi Nathan,
No luck. this is also not working.
😢😢

regards,
Nirav

On Mon, Jan 11, 2016 at 12:56 AM, Nathan Griffith <ng...@dremio.com>
wrote:

> Hi Nirav,
>
> No problem!
>
> Your 'src/main/resources/drill-module.conf' file should look like this:
>
> drill {
>   classpath.scanning {
>     packages : ${?drill.classpath.scanning.packages} [
>       com.yourgroupidentifier.udf
>     ]
>   }
> }
>
> where 'com.yourgroupidentifier.udf' should be your package identifier.
>
> The first part of this blog post can give you more context if you feel
> like you need it:
>
>
> http://www.dremio.com/blog/querying-google-analytics-json-with-a-custom-sql-function/
>
> Best,
> Nathan
>
> On Sat, Jan 9, 2016 at 6:40 AM, Nirav Shah <ni...@games24x7.com>
> wrote:
> > Thanks Nathan for spending time on this issue.
> >
> > I have just put blank file in project.
> > Do I need to write something in this file?
> > On Jan 8, 2016 10:23 PM, "Nathan Griffith" <ng...@dremio.com> wrote:
> >
> >> Hi again Nirav,
> >>
> >> Yup that looks like Drill just isn't finding the function. Do you have
> >> a '/src/main/resources/drill-module.conf' file set up in your Maven
> >> project for the UDF? If so, could you paste the text here?
> >>
> >> Best,
> >> Nathan
> >>
> >> On Thu, Jan 7, 2016 at 11:03 PM, Nirav Shah <ni...@games24x7.com>
> >> wrote:
> >> > Sorry for delayed response.
> >> >
> >> > @Abdel,
> >> > I have put both jars in 3rdparty jars. My other UDFs are working fine.
> >> >
> >> > @Nathan
> >> > I tried this still same issue.
> >> >
> >> > May be I am doing some silly mistake.
> >> >
> >> > *Complete Code :*
> >> >
> >> > package com.games24x7.drill;
> >> >
> >> > import java.util.Date;
> >> >
> >> > import javax.inject.Inject;
> >> >
> >> > import org.apache.drill.exec.expr.DrillSimpleFunc;
> >> > import org.apache.drill.exec.expr.annotations.FunctionTemplate;
> >> > import org.apache.drill.exec.expr.annotations.Output;
> >> > import org.apache.drill.exec.expr.annotations.Param;
> >> > import org.apache.drill.exec.expr.holders.IntHolder;
> >> > import org.apache.drill.exec.expr.holders.NullableVarCharHolder;
> >> > import org.apache.drill.exec.expr.holders.VarCharHolder;
> >> >
> >> > import io.netty.buffer.DrillBuf;
> >> > import net.sourceforge.wurfl.core.Device;
> >> > import net.sourceforge.wurfl.core.EngineTarget;
> >> >
> >> > @FunctionTemplate(name = "GetBrowserDtl", scope =
> >> > FunctionTemplate.FunctionScope.SIMPLE, nulls =
> >> > FunctionTemplate.NullHandling.NULL_IF_NULL)
> >> > public  class BrowserFuncNew implements DrillSimpleFunc {
> >> >
> >> >     @Param
> >> >     NullableVarCharHolder userAgent;
> >> >     @Param
> >> >     IntHolder option;
> >> >     @Output
> >> >     VarCharHolder outValue;
> >> >     @Inject
> >> >     DrillBuf buffer;
> >> >     @Inject
> >> >     net.sourceforge.wurfl.core.GeneralWURFLEngine wurfl;
> >> >     public void setup() {
> >> >         // TODO Auto-generated method stub
> >> >         //wurfl = new
> >> > net.sourceforge.wurfl.core.GeneralWURFLEngine("wurfl.xml");
> >> >     }
> >> >
> >> >     public void eval() {
> >> >         String stringOutValue = "null";
> >> >
> >> >         try {
> >> >             wurfl = new
> >> >
> net.sourceforge.wurfl.core.GeneralWURFLEngine("/home/nirav/wurfl.xml");
> >> >     //        String SUA =
> >> >
> >>
> org.apache.drill.exec.expr.fn.impl.StringFunctionHelpers.toStringFromUTF8(userAgent.start,
> >> > userAgent.end, userAgent.buffer);
> >> >
> >> >
> >> > /*            String[] capabilities = {
> >> >                     "device_os",
> >> >                     "device_os_version",
> >> >                     "is_tablet",
> >> >                     "is_wireless_device",
> >> >                     "pointing_method",
> >> >                     "preferred_markup",
> >> >                     "resolution_height",
> >> >                     "resolution_width",
> >> >                     "ux_full_desktop",
> >> >                     "xhtml_support_level",
> >> >                     "is_smarttv",
> >> >                     "can_assign_phone_number",
> >> >                     "brand_name",
> >> >                     "model_name",
> >> >                     "marketing_name",
> >> >                     "mobile_browser_version"
> >> >                 };
> >> >             wurfl.setEngineTarget(EngineTarget.accuracy);
> >> >             wurfl.setCapabilityFilter(capabilities);
> >> >             Device device = wurfl.getDeviceForRequest(SUA);
> >> >             System.out.println("4-->"+new Date(
> >> > System.currentTimeMillis()));
> >> >             System.out.println("Device OS: " +
> >> > device.getCapability("device_os"));
> >> >             System.out.println("Device OS version: " +
> >> > device.getCapability("device_os_version"));
> >> >             System.out.println("Brand name: " +
> >> > device.getCapability("brand_name"));
> >> >             System.out.println("advertised_device_os_version: " +
> >> > device.getCapability("advertised_device_os_version"));
> >> >             System.out.println("advertised_device_os: " +
> >> > device.getCapability("advertised_device_os"));
> >> >             System.out.println("advertised_browser: " +
> >> > device.getCapability("advertised_browser"));
> >> >
> >> >
> >>
> System.out.println("advertised_browser_version:"+device.getCapability("advertised_browser_version"));
> >> >             stringOutValue =
> device.getCapability("device_os_version");
> >> > */
> >> >             byte[] valueDecoded = stringOutValue.getBytes();
> >> >             outValue.buffer =
> >> buffer.reallocIfNeeded(valueDecoded.length);
> >> >             outValue.start = 0;
> >> >             outValue.end = valueDecoded.length;
> >> >             buffer.setBytes(0, valueDecoded);
> >> >         } catch (Exception e) {
> >> >             // TODO Auto-generated catch block
> >> >             //stringOutValue = "null6";
> >> >             byte[] valueDecoded = e.getMessage().getBytes();
> >> >             outValue.buffer =
> >> buffer.reallocIfNeeded(valueDecoded.length);
> >> >             outValue.start = 0;
> >> >             outValue.end = valueDecoded.length;
> >> >             buffer.setBytes(0, valueDecoded);
> >> >
> >> >         }
> >> >
> >> >     }
> >> > }
> >> > // select GetBrowserDtl('Mozilla/5.0 (X11; Linux x86_64)
> >> AppleWebKit/537.36
> >> > (KHTML, like Gecko) Chrome/47.0.2526.80 Safari/537.36',1) from
> >> (values(1));
> >> > //select GetBrowserDtl('Mozilla/5.0 (X11; Ubuntu; Linux x86_64;
> rv:31.0)
> >> > Gecko/20100101 Firefox/31.0',1) from (values(1));
> >> > //select GetBrowserDtl('Mozilla/5.0 (X11; Ubuntu; Linux x86_64;
> rv:31.0)
> >> > Gecko/20100101 Firefox/31.0',1) from (values(1));
> >> >
> >> > *Result:*
> >> >
> >> > 0: jdbc:drill:zk=local> select GetBrowserDtl('Mozilla/5.0 (X11; Linux
> >> > x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.80
> >> > Safari/537.36',1) from (values(1));
> >> > Jan 08, 2016 12:14:17 PM
> >> > org.apache.calcite.sql.validate.SqlValidatorException <init>
> >> > SEVERE: org.apache.calcite.sql.validate.SqlValidatorException: No
> match
> >> > found for function signature GetBrowserDtl(<CHARACTER>, <NUMERIC>)
> >> > Jan 08, 2016 12:14:17 PM org.apache.calcite.runtime.CalciteException
> >> <init>
> >> > SEVERE: org.apache.calcite.runtime.CalciteContextException: From line
> 1,
> >> > column 8 to line 1, column 130: No match found for function signature
> >> > GetBrowserDtl(<CHARACTER>, <NUMERIC>)
> >> > Error: VALIDATION ERROR: From line 1, column 8 to line 1, column 130:
> No
> >> > match found for function signature GetBrowserDtl(<CHARACTER>,
> <NUMERIC>)
> >> >
> >> >
> >> > [Error Id: 5a8c24d3-1b26-4dfd-be6d-615ba051ad1c on nirav:31010]
> >> > (state=,code=0)
> >> >
> >> >
> >> > On Thu, Jan 7, 2016 at 2:55 AM, Nathan Griffith <ngriffith@dremio.com
> >
> >> > wrote:
> >> >
> >> >> Hi Nirav!
> >> >>
> >> >> A couple thoughts: a.) To help troubleshoot, you may want to prepend
> >> >> the full path of "wurfl.xml" in the first statement of your code, b.)
> >> >> So when you try to use the UDF in a query you get absolutely no error
> >> >> messages from Drill?
> >> >>
> >> >> Also, the first part of this article
> >> >> (
> >> >>
> >>
> http://www.dremio.com/blog/querying-google-analytics-json-with-a-custom-sql-function/
> >> >> )
> >> >> makes a good resource for telling Drill how to pick up on a new UDF.
> >> >>
> >> >> Best,
> >> >> Nathan
> >> >>
> >> >> On Wed, Jan 6, 2016 at 10:23 AM, Abdel Hakim Deneche
> >> >> <ad...@maprtech.com> wrote:
> >> >> > According to Drill documentation:
> >> >> >
> >> >> > http://drill.apache.org/docs/adding-custom-functions-to-drill/
> >> >> >
> >> >> > You need to copy both class jar and source jar of your UDF to
> >> >> > $DRILL_HOME/jars/3rdparty/
> >> >> >
> >> >> > did you do it ?
> >> >> >
> >> >> > On Tue, Jan 5, 2016 at 11:58 PM, Nirav Shah <
> nirav.shah@games24x7.com
> >> >
> >> >> > wrote:
> >> >> >
> >> >> >> Hi ,
> >> >> >>
> >> >> >>
> >> >> >> I am trying to extract info from user agent using WURFL libraries.
> >> >> >>
> >> >> >> I am not sure what's wrong I am doing here but it's not working
> and
> >> not
> >> >> >> giving any errors as well.
> >> >> >>
> >> >> >> I have put wurfl.xml in source folder and  wurfl<version>.jar to
> >> >> >> /jar/3rdparty/
> >> >> >>
> >> >> >> *Code :*
> >> >> >>
> >> >> >>         wurfl = new
> >> >> >> net.sourceforge.wurfl.core.GeneralWURFLEngine("wurfl.xml");
> >> >> >>             String SUA =
> >> >> >>
> >> >> >>
> >> >>
> >>
> org.apache.drill.exec.expr.fn.impl.StringFunctionHelpers.toStringFromUTF8(userAgent.start,
> >> >> >> userAgent.end, userAgent.buffer);
> >> >> >>
> >> >> >>
> >> >> >>             String[] capabilities = {
> >> >> >>                     "device_os",
> >> >> >>                     "device_os_version",
> >> >> >>                     "is_tablet",
> >> >> >>                     "is_wireless_device",
> >> >> >>                     "pointing_method",
> >> >> >>                     "preferred_markup",
> >> >> >>                     "resolution_height",
> >> >> >>                     "resolution_width",
> >> >> >>                     "ux_full_desktop",
> >> >> >>                     "xhtml_support_level",
> >> >> >>                     "is_smarttv",
> >> >> >>                     "can_assign_phone_number",
> >> >> >>                     "brand_name",
> >> >> >>                     "model_name",
> >> >> >>                     "marketing_name",
> >> >> >>                     "mobile_browser_version"
> >> >> >>                 };
> >> >> >>             wurfl.setEngineTarget(EngineTarget.accuracy);
> >> >> >>             wurfl.setCapabilityFilter(capabilities);
> >> >> >>             Device device = wurfl.getDeviceForRequest(SUA);
> >> >> >>             System.out.println("4-->"+new Date(
> >> >> >> System.currentTimeMillis()));
> >> >> >>             System.out.println("Device OS: " +
> >> >> >> device.getCapability("device_os"));
> >> >> >>             System.out.println("Device OS version: " +
> >> >> >> device.getCapability("device_os_version"));
> >> >> >>             System.out.println("Brand name: " +
> >> >> >> device.getCapability("brand_name"));
> >> >> >>             System.out.println("advertised_device_os_version: " +
> >> >> >> device.getCapability("advertised_device_os_version"));
> >> >> >>             System.out.println("advertised_device_os: " +
> >> >> >> device.getCapability("advertised_device_os"));
> >> >> >>             System.out.println("advertised_browser: " +
> >> >> >> device.getCapability("advertised_browser"));
> >> >> >>
> >> >> >>
> >> >> >>
> >> >>
> >>
> System.out.println("advertised_browser_version:"+device.getCapability("advertised_browser_version"));
> >> >> >>             stringOutValue =
> >> device.getCapability("device_os_version");
> >> >> >>
> >> >> >>
> >> >> >> Regards,
> >> >> >> Nirav
> >> >> >>
> >> >> >
> >> >> >
> >> >> >
> >> >> > --
> >> >> >
> >> >> > Abdelhakim Deneche
> >> >> >
> >> >> > Software Engineer
> >> >> >
> >> >> >   <http://www.mapr.com/>
> >> >> >
> >> >> >
> >> >> > Now Available - Free Hadoop On-Demand Training
> >> >> > <
> >> >>
> >>
> http://www.mapr.com/training?utm_source=Email&utm_medium=Signature&utm_campaign=Free%20available
> >> >> >
> >> >>
> >>
>

Re: Issue in developing UDF

Posted by Nathan Griffith <ng...@dremio.com>.
Hi Nirav,

No problem!

Your 'src/main/resources/drill-module.conf' file should look like this:

drill {
  classpath.scanning {
    packages : ${?drill.classpath.scanning.packages} [
      com.yourgroupidentifier.udf
    ]
  }
}

where 'com.yourgroupidentifier.udf' should be your package identifier.

The first part of this blog post can give you more context if you feel
like you need it:

http://www.dremio.com/blog/querying-google-analytics-json-with-a-custom-sql-function/

Best,
Nathan

On Sat, Jan 9, 2016 at 6:40 AM, Nirav Shah <ni...@games24x7.com> wrote:
> Thanks Nathan for spending time on this issue.
>
> I have just put blank file in project.
> Do I need to write something in this file?
> On Jan 8, 2016 10:23 PM, "Nathan Griffith" <ng...@dremio.com> wrote:
>
>> Hi again Nirav,
>>
>> Yup that looks like Drill just isn't finding the function. Do you have
>> a '/src/main/resources/drill-module.conf' file set up in your Maven
>> project for the UDF? If so, could you paste the text here?
>>
>> Best,
>> Nathan
>>
>> On Thu, Jan 7, 2016 at 11:03 PM, Nirav Shah <ni...@games24x7.com>
>> wrote:
>> > Sorry for delayed response.
>> >
>> > @Abdel,
>> > I have put both jars in 3rdparty jars. My other UDFs are working fine.
>> >
>> > @Nathan
>> > I tried this still same issue.
>> >
>> > May be I am doing some silly mistake.
>> >
>> > *Complete Code :*
>> >
>> > package com.games24x7.drill;
>> >
>> > import java.util.Date;
>> >
>> > import javax.inject.Inject;
>> >
>> > import org.apache.drill.exec.expr.DrillSimpleFunc;
>> > import org.apache.drill.exec.expr.annotations.FunctionTemplate;
>> > import org.apache.drill.exec.expr.annotations.Output;
>> > import org.apache.drill.exec.expr.annotations.Param;
>> > import org.apache.drill.exec.expr.holders.IntHolder;
>> > import org.apache.drill.exec.expr.holders.NullableVarCharHolder;
>> > import org.apache.drill.exec.expr.holders.VarCharHolder;
>> >
>> > import io.netty.buffer.DrillBuf;
>> > import net.sourceforge.wurfl.core.Device;
>> > import net.sourceforge.wurfl.core.EngineTarget;
>> >
>> > @FunctionTemplate(name = "GetBrowserDtl", scope =
>> > FunctionTemplate.FunctionScope.SIMPLE, nulls =
>> > FunctionTemplate.NullHandling.NULL_IF_NULL)
>> > public  class BrowserFuncNew implements DrillSimpleFunc {
>> >
>> >     @Param
>> >     NullableVarCharHolder userAgent;
>> >     @Param
>> >     IntHolder option;
>> >     @Output
>> >     VarCharHolder outValue;
>> >     @Inject
>> >     DrillBuf buffer;
>> >     @Inject
>> >     net.sourceforge.wurfl.core.GeneralWURFLEngine wurfl;
>> >     public void setup() {
>> >         // TODO Auto-generated method stub
>> >         //wurfl = new
>> > net.sourceforge.wurfl.core.GeneralWURFLEngine("wurfl.xml");
>> >     }
>> >
>> >     public void eval() {
>> >         String stringOutValue = "null";
>> >
>> >         try {
>> >             wurfl = new
>> > net.sourceforge.wurfl.core.GeneralWURFLEngine("/home/nirav/wurfl.xml");
>> >     //        String SUA =
>> >
>> org.apache.drill.exec.expr.fn.impl.StringFunctionHelpers.toStringFromUTF8(userAgent.start,
>> > userAgent.end, userAgent.buffer);
>> >
>> >
>> > /*            String[] capabilities = {
>> >                     "device_os",
>> >                     "device_os_version",
>> >                     "is_tablet",
>> >                     "is_wireless_device",
>> >                     "pointing_method",
>> >                     "preferred_markup",
>> >                     "resolution_height",
>> >                     "resolution_width",
>> >                     "ux_full_desktop",
>> >                     "xhtml_support_level",
>> >                     "is_smarttv",
>> >                     "can_assign_phone_number",
>> >                     "brand_name",
>> >                     "model_name",
>> >                     "marketing_name",
>> >                     "mobile_browser_version"
>> >                 };
>> >             wurfl.setEngineTarget(EngineTarget.accuracy);
>> >             wurfl.setCapabilityFilter(capabilities);
>> >             Device device = wurfl.getDeviceForRequest(SUA);
>> >             System.out.println("4-->"+new Date(
>> > System.currentTimeMillis()));
>> >             System.out.println("Device OS: " +
>> > device.getCapability("device_os"));
>> >             System.out.println("Device OS version: " +
>> > device.getCapability("device_os_version"));
>> >             System.out.println("Brand name: " +
>> > device.getCapability("brand_name"));
>> >             System.out.println("advertised_device_os_version: " +
>> > device.getCapability("advertised_device_os_version"));
>> >             System.out.println("advertised_device_os: " +
>> > device.getCapability("advertised_device_os"));
>> >             System.out.println("advertised_browser: " +
>> > device.getCapability("advertised_browser"));
>> >
>> >
>> System.out.println("advertised_browser_version:"+device.getCapability("advertised_browser_version"));
>> >             stringOutValue = device.getCapability("device_os_version");
>> > */
>> >             byte[] valueDecoded = stringOutValue.getBytes();
>> >             outValue.buffer =
>> buffer.reallocIfNeeded(valueDecoded.length);
>> >             outValue.start = 0;
>> >             outValue.end = valueDecoded.length;
>> >             buffer.setBytes(0, valueDecoded);
>> >         } catch (Exception e) {
>> >             // TODO Auto-generated catch block
>> >             //stringOutValue = "null6";
>> >             byte[] valueDecoded = e.getMessage().getBytes();
>> >             outValue.buffer =
>> buffer.reallocIfNeeded(valueDecoded.length);
>> >             outValue.start = 0;
>> >             outValue.end = valueDecoded.length;
>> >             buffer.setBytes(0, valueDecoded);
>> >
>> >         }
>> >
>> >     }
>> > }
>> > // select GetBrowserDtl('Mozilla/5.0 (X11; Linux x86_64)
>> AppleWebKit/537.36
>> > (KHTML, like Gecko) Chrome/47.0.2526.80 Safari/537.36',1) from
>> (values(1));
>> > //select GetBrowserDtl('Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:31.0)
>> > Gecko/20100101 Firefox/31.0',1) from (values(1));
>> > //select GetBrowserDtl('Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:31.0)
>> > Gecko/20100101 Firefox/31.0',1) from (values(1));
>> >
>> > *Result:*
>> >
>> > 0: jdbc:drill:zk=local> select GetBrowserDtl('Mozilla/5.0 (X11; Linux
>> > x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.80
>> > Safari/537.36',1) from (values(1));
>> > Jan 08, 2016 12:14:17 PM
>> > org.apache.calcite.sql.validate.SqlValidatorException <init>
>> > SEVERE: org.apache.calcite.sql.validate.SqlValidatorException: No match
>> > found for function signature GetBrowserDtl(<CHARACTER>, <NUMERIC>)
>> > Jan 08, 2016 12:14:17 PM org.apache.calcite.runtime.CalciteException
>> <init>
>> > SEVERE: org.apache.calcite.runtime.CalciteContextException: From line 1,
>> > column 8 to line 1, column 130: No match found for function signature
>> > GetBrowserDtl(<CHARACTER>, <NUMERIC>)
>> > Error: VALIDATION ERROR: From line 1, column 8 to line 1, column 130: No
>> > match found for function signature GetBrowserDtl(<CHARACTER>, <NUMERIC>)
>> >
>> >
>> > [Error Id: 5a8c24d3-1b26-4dfd-be6d-615ba051ad1c on nirav:31010]
>> > (state=,code=0)
>> >
>> >
>> > On Thu, Jan 7, 2016 at 2:55 AM, Nathan Griffith <ng...@dremio.com>
>> > wrote:
>> >
>> >> Hi Nirav!
>> >>
>> >> A couple thoughts: a.) To help troubleshoot, you may want to prepend
>> >> the full path of "wurfl.xml" in the first statement of your code, b.)
>> >> So when you try to use the UDF in a query you get absolutely no error
>> >> messages from Drill?
>> >>
>> >> Also, the first part of this article
>> >> (
>> >>
>> http://www.dremio.com/blog/querying-google-analytics-json-with-a-custom-sql-function/
>> >> )
>> >> makes a good resource for telling Drill how to pick up on a new UDF.
>> >>
>> >> Best,
>> >> Nathan
>> >>
>> >> On Wed, Jan 6, 2016 at 10:23 AM, Abdel Hakim Deneche
>> >> <ad...@maprtech.com> wrote:
>> >> > According to Drill documentation:
>> >> >
>> >> > http://drill.apache.org/docs/adding-custom-functions-to-drill/
>> >> >
>> >> > You need to copy both class jar and source jar of your UDF to
>> >> > $DRILL_HOME/jars/3rdparty/
>> >> >
>> >> > did you do it ?
>> >> >
>> >> > On Tue, Jan 5, 2016 at 11:58 PM, Nirav Shah <nirav.shah@games24x7.com
>> >
>> >> > wrote:
>> >> >
>> >> >> Hi ,
>> >> >>
>> >> >>
>> >> >> I am trying to extract info from user agent using WURFL libraries.
>> >> >>
>> >> >> I am not sure what's wrong I am doing here but it's not working and
>> not
>> >> >> giving any errors as well.
>> >> >>
>> >> >> I have put wurfl.xml in source folder and  wurfl<version>.jar to
>> >> >> /jar/3rdparty/
>> >> >>
>> >> >> *Code :*
>> >> >>
>> >> >>         wurfl = new
>> >> >> net.sourceforge.wurfl.core.GeneralWURFLEngine("wurfl.xml");
>> >> >>             String SUA =
>> >> >>
>> >> >>
>> >>
>> org.apache.drill.exec.expr.fn.impl.StringFunctionHelpers.toStringFromUTF8(userAgent.start,
>> >> >> userAgent.end, userAgent.buffer);
>> >> >>
>> >> >>
>> >> >>             String[] capabilities = {
>> >> >>                     "device_os",
>> >> >>                     "device_os_version",
>> >> >>                     "is_tablet",
>> >> >>                     "is_wireless_device",
>> >> >>                     "pointing_method",
>> >> >>                     "preferred_markup",
>> >> >>                     "resolution_height",
>> >> >>                     "resolution_width",
>> >> >>                     "ux_full_desktop",
>> >> >>                     "xhtml_support_level",
>> >> >>                     "is_smarttv",
>> >> >>                     "can_assign_phone_number",
>> >> >>                     "brand_name",
>> >> >>                     "model_name",
>> >> >>                     "marketing_name",
>> >> >>                     "mobile_browser_version"
>> >> >>                 };
>> >> >>             wurfl.setEngineTarget(EngineTarget.accuracy);
>> >> >>             wurfl.setCapabilityFilter(capabilities);
>> >> >>             Device device = wurfl.getDeviceForRequest(SUA);
>> >> >>             System.out.println("4-->"+new Date(
>> >> >> System.currentTimeMillis()));
>> >> >>             System.out.println("Device OS: " +
>> >> >> device.getCapability("device_os"));
>> >> >>             System.out.println("Device OS version: " +
>> >> >> device.getCapability("device_os_version"));
>> >> >>             System.out.println("Brand name: " +
>> >> >> device.getCapability("brand_name"));
>> >> >>             System.out.println("advertised_device_os_version: " +
>> >> >> device.getCapability("advertised_device_os_version"));
>> >> >>             System.out.println("advertised_device_os: " +
>> >> >> device.getCapability("advertised_device_os"));
>> >> >>             System.out.println("advertised_browser: " +
>> >> >> device.getCapability("advertised_browser"));
>> >> >>
>> >> >>
>> >> >>
>> >>
>> System.out.println("advertised_browser_version:"+device.getCapability("advertised_browser_version"));
>> >> >>             stringOutValue =
>> device.getCapability("device_os_version");
>> >> >>
>> >> >>
>> >> >> Regards,
>> >> >> Nirav
>> >> >>
>> >> >
>> >> >
>> >> >
>> >> > --
>> >> >
>> >> > Abdelhakim Deneche
>> >> >
>> >> > Software Engineer
>> >> >
>> >> >   <http://www.mapr.com/>
>> >> >
>> >> >
>> >> > Now Available - Free Hadoop On-Demand Training
>> >> > <
>> >>
>> http://www.mapr.com/training?utm_source=Email&utm_medium=Signature&utm_campaign=Free%20available
>> >> >
>> >>
>>

Re: Issue in developing UDF

Posted by Nirav Shah <ni...@games24x7.com>.
Thanks Nathan for spending time on this issue.

I have just put blank file in project.
Do I need to write something in this file?
On Jan 8, 2016 10:23 PM, "Nathan Griffith" <ng...@dremio.com> wrote:

> Hi again Nirav,
>
> Yup that looks like Drill just isn't finding the function. Do you have
> a '/src/main/resources/drill-module.conf' file set up in your Maven
> project for the UDF? If so, could you paste the text here?
>
> Best,
> Nathan
>
> On Thu, Jan 7, 2016 at 11:03 PM, Nirav Shah <ni...@games24x7.com>
> wrote:
> > Sorry for delayed response.
> >
> > @Abdel,
> > I have put both jars in 3rdparty jars. My other UDFs are working fine.
> >
> > @Nathan
> > I tried this still same issue.
> >
> > May be I am doing some silly mistake.
> >
> > *Complete Code :*
> >
> > package com.games24x7.drill;
> >
> > import java.util.Date;
> >
> > import javax.inject.Inject;
> >
> > import org.apache.drill.exec.expr.DrillSimpleFunc;
> > import org.apache.drill.exec.expr.annotations.FunctionTemplate;
> > import org.apache.drill.exec.expr.annotations.Output;
> > import org.apache.drill.exec.expr.annotations.Param;
> > import org.apache.drill.exec.expr.holders.IntHolder;
> > import org.apache.drill.exec.expr.holders.NullableVarCharHolder;
> > import org.apache.drill.exec.expr.holders.VarCharHolder;
> >
> > import io.netty.buffer.DrillBuf;
> > import net.sourceforge.wurfl.core.Device;
> > import net.sourceforge.wurfl.core.EngineTarget;
> >
> > @FunctionTemplate(name = "GetBrowserDtl", scope =
> > FunctionTemplate.FunctionScope.SIMPLE, nulls =
> > FunctionTemplate.NullHandling.NULL_IF_NULL)
> > public  class BrowserFuncNew implements DrillSimpleFunc {
> >
> >     @Param
> >     NullableVarCharHolder userAgent;
> >     @Param
> >     IntHolder option;
> >     @Output
> >     VarCharHolder outValue;
> >     @Inject
> >     DrillBuf buffer;
> >     @Inject
> >     net.sourceforge.wurfl.core.GeneralWURFLEngine wurfl;
> >     public void setup() {
> >         // TODO Auto-generated method stub
> >         //wurfl = new
> > net.sourceforge.wurfl.core.GeneralWURFLEngine("wurfl.xml");
> >     }
> >
> >     public void eval() {
> >         String stringOutValue = "null";
> >
> >         try {
> >             wurfl = new
> > net.sourceforge.wurfl.core.GeneralWURFLEngine("/home/nirav/wurfl.xml");
> >     //        String SUA =
> >
> org.apache.drill.exec.expr.fn.impl.StringFunctionHelpers.toStringFromUTF8(userAgent.start,
> > userAgent.end, userAgent.buffer);
> >
> >
> > /*            String[] capabilities = {
> >                     "device_os",
> >                     "device_os_version",
> >                     "is_tablet",
> >                     "is_wireless_device",
> >                     "pointing_method",
> >                     "preferred_markup",
> >                     "resolution_height",
> >                     "resolution_width",
> >                     "ux_full_desktop",
> >                     "xhtml_support_level",
> >                     "is_smarttv",
> >                     "can_assign_phone_number",
> >                     "brand_name",
> >                     "model_name",
> >                     "marketing_name",
> >                     "mobile_browser_version"
> >                 };
> >             wurfl.setEngineTarget(EngineTarget.accuracy);
> >             wurfl.setCapabilityFilter(capabilities);
> >             Device device = wurfl.getDeviceForRequest(SUA);
> >             System.out.println("4-->"+new Date(
> > System.currentTimeMillis()));
> >             System.out.println("Device OS: " +
> > device.getCapability("device_os"));
> >             System.out.println("Device OS version: " +
> > device.getCapability("device_os_version"));
> >             System.out.println("Brand name: " +
> > device.getCapability("brand_name"));
> >             System.out.println("advertised_device_os_version: " +
> > device.getCapability("advertised_device_os_version"));
> >             System.out.println("advertised_device_os: " +
> > device.getCapability("advertised_device_os"));
> >             System.out.println("advertised_browser: " +
> > device.getCapability("advertised_browser"));
> >
> >
> System.out.println("advertised_browser_version:"+device.getCapability("advertised_browser_version"));
> >             stringOutValue = device.getCapability("device_os_version");
> > */
> >             byte[] valueDecoded = stringOutValue.getBytes();
> >             outValue.buffer =
> buffer.reallocIfNeeded(valueDecoded.length);
> >             outValue.start = 0;
> >             outValue.end = valueDecoded.length;
> >             buffer.setBytes(0, valueDecoded);
> >         } catch (Exception e) {
> >             // TODO Auto-generated catch block
> >             //stringOutValue = "null6";
> >             byte[] valueDecoded = e.getMessage().getBytes();
> >             outValue.buffer =
> buffer.reallocIfNeeded(valueDecoded.length);
> >             outValue.start = 0;
> >             outValue.end = valueDecoded.length;
> >             buffer.setBytes(0, valueDecoded);
> >
> >         }
> >
> >     }
> > }
> > // select GetBrowserDtl('Mozilla/5.0 (X11; Linux x86_64)
> AppleWebKit/537.36
> > (KHTML, like Gecko) Chrome/47.0.2526.80 Safari/537.36',1) from
> (values(1));
> > //select GetBrowserDtl('Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:31.0)
> > Gecko/20100101 Firefox/31.0',1) from (values(1));
> > //select GetBrowserDtl('Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:31.0)
> > Gecko/20100101 Firefox/31.0',1) from (values(1));
> >
> > *Result:*
> >
> > 0: jdbc:drill:zk=local> select GetBrowserDtl('Mozilla/5.0 (X11; Linux
> > x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.80
> > Safari/537.36',1) from (values(1));
> > Jan 08, 2016 12:14:17 PM
> > org.apache.calcite.sql.validate.SqlValidatorException <init>
> > SEVERE: org.apache.calcite.sql.validate.SqlValidatorException: No match
> > found for function signature GetBrowserDtl(<CHARACTER>, <NUMERIC>)
> > Jan 08, 2016 12:14:17 PM org.apache.calcite.runtime.CalciteException
> <init>
> > SEVERE: org.apache.calcite.runtime.CalciteContextException: From line 1,
> > column 8 to line 1, column 130: No match found for function signature
> > GetBrowserDtl(<CHARACTER>, <NUMERIC>)
> > Error: VALIDATION ERROR: From line 1, column 8 to line 1, column 130: No
> > match found for function signature GetBrowserDtl(<CHARACTER>, <NUMERIC>)
> >
> >
> > [Error Id: 5a8c24d3-1b26-4dfd-be6d-615ba051ad1c on nirav:31010]
> > (state=,code=0)
> >
> >
> > On Thu, Jan 7, 2016 at 2:55 AM, Nathan Griffith <ng...@dremio.com>
> > wrote:
> >
> >> Hi Nirav!
> >>
> >> A couple thoughts: a.) To help troubleshoot, you may want to prepend
> >> the full path of "wurfl.xml" in the first statement of your code, b.)
> >> So when you try to use the UDF in a query you get absolutely no error
> >> messages from Drill?
> >>
> >> Also, the first part of this article
> >> (
> >>
> http://www.dremio.com/blog/querying-google-analytics-json-with-a-custom-sql-function/
> >> )
> >> makes a good resource for telling Drill how to pick up on a new UDF.
> >>
> >> Best,
> >> Nathan
> >>
> >> On Wed, Jan 6, 2016 at 10:23 AM, Abdel Hakim Deneche
> >> <ad...@maprtech.com> wrote:
> >> > According to Drill documentation:
> >> >
> >> > http://drill.apache.org/docs/adding-custom-functions-to-drill/
> >> >
> >> > You need to copy both class jar and source jar of your UDF to
> >> > $DRILL_HOME/jars/3rdparty/
> >> >
> >> > did you do it ?
> >> >
> >> > On Tue, Jan 5, 2016 at 11:58 PM, Nirav Shah <nirav.shah@games24x7.com
> >
> >> > wrote:
> >> >
> >> >> Hi ,
> >> >>
> >> >>
> >> >> I am trying to extract info from user agent using WURFL libraries.
> >> >>
> >> >> I am not sure what's wrong I am doing here but it's not working and
> not
> >> >> giving any errors as well.
> >> >>
> >> >> I have put wurfl.xml in source folder and  wurfl<version>.jar to
> >> >> /jar/3rdparty/
> >> >>
> >> >> *Code :*
> >> >>
> >> >>         wurfl = new
> >> >> net.sourceforge.wurfl.core.GeneralWURFLEngine("wurfl.xml");
> >> >>             String SUA =
> >> >>
> >> >>
> >>
> org.apache.drill.exec.expr.fn.impl.StringFunctionHelpers.toStringFromUTF8(userAgent.start,
> >> >> userAgent.end, userAgent.buffer);
> >> >>
> >> >>
> >> >>             String[] capabilities = {
> >> >>                     "device_os",
> >> >>                     "device_os_version",
> >> >>                     "is_tablet",
> >> >>                     "is_wireless_device",
> >> >>                     "pointing_method",
> >> >>                     "preferred_markup",
> >> >>                     "resolution_height",
> >> >>                     "resolution_width",
> >> >>                     "ux_full_desktop",
> >> >>                     "xhtml_support_level",
> >> >>                     "is_smarttv",
> >> >>                     "can_assign_phone_number",
> >> >>                     "brand_name",
> >> >>                     "model_name",
> >> >>                     "marketing_name",
> >> >>                     "mobile_browser_version"
> >> >>                 };
> >> >>             wurfl.setEngineTarget(EngineTarget.accuracy);
> >> >>             wurfl.setCapabilityFilter(capabilities);
> >> >>             Device device = wurfl.getDeviceForRequest(SUA);
> >> >>             System.out.println("4-->"+new Date(
> >> >> System.currentTimeMillis()));
> >> >>             System.out.println("Device OS: " +
> >> >> device.getCapability("device_os"));
> >> >>             System.out.println("Device OS version: " +
> >> >> device.getCapability("device_os_version"));
> >> >>             System.out.println("Brand name: " +
> >> >> device.getCapability("brand_name"));
> >> >>             System.out.println("advertised_device_os_version: " +
> >> >> device.getCapability("advertised_device_os_version"));
> >> >>             System.out.println("advertised_device_os: " +
> >> >> device.getCapability("advertised_device_os"));
> >> >>             System.out.println("advertised_browser: " +
> >> >> device.getCapability("advertised_browser"));
> >> >>
> >> >>
> >> >>
> >>
> System.out.println("advertised_browser_version:"+device.getCapability("advertised_browser_version"));
> >> >>             stringOutValue =
> device.getCapability("device_os_version");
> >> >>
> >> >>
> >> >> Regards,
> >> >> Nirav
> >> >>
> >> >
> >> >
> >> >
> >> > --
> >> >
> >> > Abdelhakim Deneche
> >> >
> >> > Software Engineer
> >> >
> >> >   <http://www.mapr.com/>
> >> >
> >> >
> >> > Now Available - Free Hadoop On-Demand Training
> >> > <
> >>
> http://www.mapr.com/training?utm_source=Email&utm_medium=Signature&utm_campaign=Free%20available
> >> >
> >>
>

Re: Issue in developing UDF

Posted by Nathan Griffith <ng...@dremio.com>.
Hi again Nirav,

Yup that looks like Drill just isn't finding the function. Do you have
a '/src/main/resources/drill-module.conf' file set up in your Maven
project for the UDF? If so, could you paste the text here?

Best,
Nathan

On Thu, Jan 7, 2016 at 11:03 PM, Nirav Shah <ni...@games24x7.com> wrote:
> Sorry for delayed response.
>
> @Abdel,
> I have put both jars in 3rdparty jars. My other UDFs are working fine.
>
> @Nathan
> I tried this still same issue.
>
> May be I am doing some silly mistake.
>
> *Complete Code :*
>
> package com.games24x7.drill;
>
> import java.util.Date;
>
> import javax.inject.Inject;
>
> import org.apache.drill.exec.expr.DrillSimpleFunc;
> import org.apache.drill.exec.expr.annotations.FunctionTemplate;
> import org.apache.drill.exec.expr.annotations.Output;
> import org.apache.drill.exec.expr.annotations.Param;
> import org.apache.drill.exec.expr.holders.IntHolder;
> import org.apache.drill.exec.expr.holders.NullableVarCharHolder;
> import org.apache.drill.exec.expr.holders.VarCharHolder;
>
> import io.netty.buffer.DrillBuf;
> import net.sourceforge.wurfl.core.Device;
> import net.sourceforge.wurfl.core.EngineTarget;
>
> @FunctionTemplate(name = "GetBrowserDtl", scope =
> FunctionTemplate.FunctionScope.SIMPLE, nulls =
> FunctionTemplate.NullHandling.NULL_IF_NULL)
> public  class BrowserFuncNew implements DrillSimpleFunc {
>
>     @Param
>     NullableVarCharHolder userAgent;
>     @Param
>     IntHolder option;
>     @Output
>     VarCharHolder outValue;
>     @Inject
>     DrillBuf buffer;
>     @Inject
>     net.sourceforge.wurfl.core.GeneralWURFLEngine wurfl;
>     public void setup() {
>         // TODO Auto-generated method stub
>         //wurfl = new
> net.sourceforge.wurfl.core.GeneralWURFLEngine("wurfl.xml");
>     }
>
>     public void eval() {
>         String stringOutValue = "null";
>
>         try {
>             wurfl = new
> net.sourceforge.wurfl.core.GeneralWURFLEngine("/home/nirav/wurfl.xml");
>     //        String SUA =
> org.apache.drill.exec.expr.fn.impl.StringFunctionHelpers.toStringFromUTF8(userAgent.start,
> userAgent.end, userAgent.buffer);
>
>
> /*            String[] capabilities = {
>                     "device_os",
>                     "device_os_version",
>                     "is_tablet",
>                     "is_wireless_device",
>                     "pointing_method",
>                     "preferred_markup",
>                     "resolution_height",
>                     "resolution_width",
>                     "ux_full_desktop",
>                     "xhtml_support_level",
>                     "is_smarttv",
>                     "can_assign_phone_number",
>                     "brand_name",
>                     "model_name",
>                     "marketing_name",
>                     "mobile_browser_version"
>                 };
>             wurfl.setEngineTarget(EngineTarget.accuracy);
>             wurfl.setCapabilityFilter(capabilities);
>             Device device = wurfl.getDeviceForRequest(SUA);
>             System.out.println("4-->"+new Date(
> System.currentTimeMillis()));
>             System.out.println("Device OS: " +
> device.getCapability("device_os"));
>             System.out.println("Device OS version: " +
> device.getCapability("device_os_version"));
>             System.out.println("Brand name: " +
> device.getCapability("brand_name"));
>             System.out.println("advertised_device_os_version: " +
> device.getCapability("advertised_device_os_version"));
>             System.out.println("advertised_device_os: " +
> device.getCapability("advertised_device_os"));
>             System.out.println("advertised_browser: " +
> device.getCapability("advertised_browser"));
>
> System.out.println("advertised_browser_version:"+device.getCapability("advertised_browser_version"));
>             stringOutValue = device.getCapability("device_os_version");
> */
>             byte[] valueDecoded = stringOutValue.getBytes();
>             outValue.buffer = buffer.reallocIfNeeded(valueDecoded.length);
>             outValue.start = 0;
>             outValue.end = valueDecoded.length;
>             buffer.setBytes(0, valueDecoded);
>         } catch (Exception e) {
>             // TODO Auto-generated catch block
>             //stringOutValue = "null6";
>             byte[] valueDecoded = e.getMessage().getBytes();
>             outValue.buffer = buffer.reallocIfNeeded(valueDecoded.length);
>             outValue.start = 0;
>             outValue.end = valueDecoded.length;
>             buffer.setBytes(0, valueDecoded);
>
>         }
>
>     }
> }
> // select GetBrowserDtl('Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36
> (KHTML, like Gecko) Chrome/47.0.2526.80 Safari/537.36',1) from (values(1));
> //select GetBrowserDtl('Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:31.0)
> Gecko/20100101 Firefox/31.0',1) from (values(1));
> //select GetBrowserDtl('Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:31.0)
> Gecko/20100101 Firefox/31.0',1) from (values(1));
>
> *Result:*
>
> 0: jdbc:drill:zk=local> select GetBrowserDtl('Mozilla/5.0 (X11; Linux
> x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.80
> Safari/537.36',1) from (values(1));
> Jan 08, 2016 12:14:17 PM
> org.apache.calcite.sql.validate.SqlValidatorException <init>
> SEVERE: org.apache.calcite.sql.validate.SqlValidatorException: No match
> found for function signature GetBrowserDtl(<CHARACTER>, <NUMERIC>)
> Jan 08, 2016 12:14:17 PM org.apache.calcite.runtime.CalciteException <init>
> SEVERE: org.apache.calcite.runtime.CalciteContextException: From line 1,
> column 8 to line 1, column 130: No match found for function signature
> GetBrowserDtl(<CHARACTER>, <NUMERIC>)
> Error: VALIDATION ERROR: From line 1, column 8 to line 1, column 130: No
> match found for function signature GetBrowserDtl(<CHARACTER>, <NUMERIC>)
>
>
> [Error Id: 5a8c24d3-1b26-4dfd-be6d-615ba051ad1c on nirav:31010]
> (state=,code=0)
>
>
> On Thu, Jan 7, 2016 at 2:55 AM, Nathan Griffith <ng...@dremio.com>
> wrote:
>
>> Hi Nirav!
>>
>> A couple thoughts: a.) To help troubleshoot, you may want to prepend
>> the full path of "wurfl.xml" in the first statement of your code, b.)
>> So when you try to use the UDF in a query you get absolutely no error
>> messages from Drill?
>>
>> Also, the first part of this article
>> (
>> http://www.dremio.com/blog/querying-google-analytics-json-with-a-custom-sql-function/
>> )
>> makes a good resource for telling Drill how to pick up on a new UDF.
>>
>> Best,
>> Nathan
>>
>> On Wed, Jan 6, 2016 at 10:23 AM, Abdel Hakim Deneche
>> <ad...@maprtech.com> wrote:
>> > According to Drill documentation:
>> >
>> > http://drill.apache.org/docs/adding-custom-functions-to-drill/
>> >
>> > You need to copy both class jar and source jar of your UDF to
>> > $DRILL_HOME/jars/3rdparty/
>> >
>> > did you do it ?
>> >
>> > On Tue, Jan 5, 2016 at 11:58 PM, Nirav Shah <ni...@games24x7.com>
>> > wrote:
>> >
>> >> Hi ,
>> >>
>> >>
>> >> I am trying to extract info from user agent using WURFL libraries.
>> >>
>> >> I am not sure what's wrong I am doing here but it's not working and not
>> >> giving any errors as well.
>> >>
>> >> I have put wurfl.xml in source folder and  wurfl<version>.jar to
>> >> /jar/3rdparty/
>> >>
>> >> *Code :*
>> >>
>> >>         wurfl = new
>> >> net.sourceforge.wurfl.core.GeneralWURFLEngine("wurfl.xml");
>> >>             String SUA =
>> >>
>> >>
>> org.apache.drill.exec.expr.fn.impl.StringFunctionHelpers.toStringFromUTF8(userAgent.start,
>> >> userAgent.end, userAgent.buffer);
>> >>
>> >>
>> >>             String[] capabilities = {
>> >>                     "device_os",
>> >>                     "device_os_version",
>> >>                     "is_tablet",
>> >>                     "is_wireless_device",
>> >>                     "pointing_method",
>> >>                     "preferred_markup",
>> >>                     "resolution_height",
>> >>                     "resolution_width",
>> >>                     "ux_full_desktop",
>> >>                     "xhtml_support_level",
>> >>                     "is_smarttv",
>> >>                     "can_assign_phone_number",
>> >>                     "brand_name",
>> >>                     "model_name",
>> >>                     "marketing_name",
>> >>                     "mobile_browser_version"
>> >>                 };
>> >>             wurfl.setEngineTarget(EngineTarget.accuracy);
>> >>             wurfl.setCapabilityFilter(capabilities);
>> >>             Device device = wurfl.getDeviceForRequest(SUA);
>> >>             System.out.println("4-->"+new Date(
>> >> System.currentTimeMillis()));
>> >>             System.out.println("Device OS: " +
>> >> device.getCapability("device_os"));
>> >>             System.out.println("Device OS version: " +
>> >> device.getCapability("device_os_version"));
>> >>             System.out.println("Brand name: " +
>> >> device.getCapability("brand_name"));
>> >>             System.out.println("advertised_device_os_version: " +
>> >> device.getCapability("advertised_device_os_version"));
>> >>             System.out.println("advertised_device_os: " +
>> >> device.getCapability("advertised_device_os"));
>> >>             System.out.println("advertised_browser: " +
>> >> device.getCapability("advertised_browser"));
>> >>
>> >>
>> >>
>> System.out.println("advertised_browser_version:"+device.getCapability("advertised_browser_version"));
>> >>             stringOutValue = device.getCapability("device_os_version");
>> >>
>> >>
>> >> Regards,
>> >> Nirav
>> >>
>> >
>> >
>> >
>> > --
>> >
>> > Abdelhakim Deneche
>> >
>> > Software Engineer
>> >
>> >   <http://www.mapr.com/>
>> >
>> >
>> > Now Available - Free Hadoop On-Demand Training
>> > <
>> http://www.mapr.com/training?utm_source=Email&utm_medium=Signature&utm_campaign=Free%20available
>> >
>>

Re: Issue in developing UDF

Posted by Nirav Shah <ni...@games24x7.com>.
Sorry for delayed response.

@Abdel,
I have put both jars in 3rdparty jars. My other UDFs are working fine.

@Nathan
I tried this still same issue.

May be I am doing some silly mistake.

*Complete Code :*

package com.games24x7.drill;

import java.util.Date;

import javax.inject.Inject;

import org.apache.drill.exec.expr.DrillSimpleFunc;
import org.apache.drill.exec.expr.annotations.FunctionTemplate;
import org.apache.drill.exec.expr.annotations.Output;
import org.apache.drill.exec.expr.annotations.Param;
import org.apache.drill.exec.expr.holders.IntHolder;
import org.apache.drill.exec.expr.holders.NullableVarCharHolder;
import org.apache.drill.exec.expr.holders.VarCharHolder;

import io.netty.buffer.DrillBuf;
import net.sourceforge.wurfl.core.Device;
import net.sourceforge.wurfl.core.EngineTarget;

@FunctionTemplate(name = "GetBrowserDtl", scope =
FunctionTemplate.FunctionScope.SIMPLE, nulls =
FunctionTemplate.NullHandling.NULL_IF_NULL)
public  class BrowserFuncNew implements DrillSimpleFunc {

    @Param
    NullableVarCharHolder userAgent;
    @Param
    IntHolder option;
    @Output
    VarCharHolder outValue;
    @Inject
    DrillBuf buffer;
    @Inject
    net.sourceforge.wurfl.core.GeneralWURFLEngine wurfl;
    public void setup() {
        // TODO Auto-generated method stub
        //wurfl = new
net.sourceforge.wurfl.core.GeneralWURFLEngine("wurfl.xml");
    }

    public void eval() {
        String stringOutValue = "null";

        try {
            wurfl = new
net.sourceforge.wurfl.core.GeneralWURFLEngine("/home/nirav/wurfl.xml");
    //        String SUA =
org.apache.drill.exec.expr.fn.impl.StringFunctionHelpers.toStringFromUTF8(userAgent.start,
userAgent.end, userAgent.buffer);


/*            String[] capabilities = {
                    "device_os",
                    "device_os_version",
                    "is_tablet",
                    "is_wireless_device",
                    "pointing_method",
                    "preferred_markup",
                    "resolution_height",
                    "resolution_width",
                    "ux_full_desktop",
                    "xhtml_support_level",
                    "is_smarttv",
                    "can_assign_phone_number",
                    "brand_name",
                    "model_name",
                    "marketing_name",
                    "mobile_browser_version"
                };
            wurfl.setEngineTarget(EngineTarget.accuracy);
            wurfl.setCapabilityFilter(capabilities);
            Device device = wurfl.getDeviceForRequest(SUA);
            System.out.println("4-->"+new Date(
System.currentTimeMillis()));
            System.out.println("Device OS: " +
device.getCapability("device_os"));
            System.out.println("Device OS version: " +
device.getCapability("device_os_version"));
            System.out.println("Brand name: " +
device.getCapability("brand_name"));
            System.out.println("advertised_device_os_version: " +
device.getCapability("advertised_device_os_version"));
            System.out.println("advertised_device_os: " +
device.getCapability("advertised_device_os"));
            System.out.println("advertised_browser: " +
device.getCapability("advertised_browser"));

System.out.println("advertised_browser_version:"+device.getCapability("advertised_browser_version"));
            stringOutValue = device.getCapability("device_os_version");
*/
            byte[] valueDecoded = stringOutValue.getBytes();
            outValue.buffer = buffer.reallocIfNeeded(valueDecoded.length);
            outValue.start = 0;
            outValue.end = valueDecoded.length;
            buffer.setBytes(0, valueDecoded);
        } catch (Exception e) {
            // TODO Auto-generated catch block
            //stringOutValue = "null6";
            byte[] valueDecoded = e.getMessage().getBytes();
            outValue.buffer = buffer.reallocIfNeeded(valueDecoded.length);
            outValue.start = 0;
            outValue.end = valueDecoded.length;
            buffer.setBytes(0, valueDecoded);

        }

    }
}
// select GetBrowserDtl('Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36
(KHTML, like Gecko) Chrome/47.0.2526.80 Safari/537.36',1) from (values(1));
//select GetBrowserDtl('Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:31.0)
Gecko/20100101 Firefox/31.0',1) from (values(1));
//select GetBrowserDtl('Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:31.0)
Gecko/20100101 Firefox/31.0',1) from (values(1));

*Result:*

0: jdbc:drill:zk=local> select GetBrowserDtl('Mozilla/5.0 (X11; Linux
x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.80
Safari/537.36',1) from (values(1));
Jan 08, 2016 12:14:17 PM
org.apache.calcite.sql.validate.SqlValidatorException <init>
SEVERE: org.apache.calcite.sql.validate.SqlValidatorException: No match
found for function signature GetBrowserDtl(<CHARACTER>, <NUMERIC>)
Jan 08, 2016 12:14:17 PM org.apache.calcite.runtime.CalciteException <init>
SEVERE: org.apache.calcite.runtime.CalciteContextException: From line 1,
column 8 to line 1, column 130: No match found for function signature
GetBrowserDtl(<CHARACTER>, <NUMERIC>)
Error: VALIDATION ERROR: From line 1, column 8 to line 1, column 130: No
match found for function signature GetBrowserDtl(<CHARACTER>, <NUMERIC>)


[Error Id: 5a8c24d3-1b26-4dfd-be6d-615ba051ad1c on nirav:31010]
(state=,code=0)


On Thu, Jan 7, 2016 at 2:55 AM, Nathan Griffith <ng...@dremio.com>
wrote:

> Hi Nirav!
>
> A couple thoughts: a.) To help troubleshoot, you may want to prepend
> the full path of "wurfl.xml" in the first statement of your code, b.)
> So when you try to use the UDF in a query you get absolutely no error
> messages from Drill?
>
> Also, the first part of this article
> (
> http://www.dremio.com/blog/querying-google-analytics-json-with-a-custom-sql-function/
> )
> makes a good resource for telling Drill how to pick up on a new UDF.
>
> Best,
> Nathan
>
> On Wed, Jan 6, 2016 at 10:23 AM, Abdel Hakim Deneche
> <ad...@maprtech.com> wrote:
> > According to Drill documentation:
> >
> > http://drill.apache.org/docs/adding-custom-functions-to-drill/
> >
> > You need to copy both class jar and source jar of your UDF to
> > $DRILL_HOME/jars/3rdparty/
> >
> > did you do it ?
> >
> > On Tue, Jan 5, 2016 at 11:58 PM, Nirav Shah <ni...@games24x7.com>
> > wrote:
> >
> >> Hi ,
> >>
> >>
> >> I am trying to extract info from user agent using WURFL libraries.
> >>
> >> I am not sure what's wrong I am doing here but it's not working and not
> >> giving any errors as well.
> >>
> >> I have put wurfl.xml in source folder and  wurfl<version>.jar to
> >> /jar/3rdparty/
> >>
> >> *Code :*
> >>
> >>         wurfl = new
> >> net.sourceforge.wurfl.core.GeneralWURFLEngine("wurfl.xml");
> >>             String SUA =
> >>
> >>
> org.apache.drill.exec.expr.fn.impl.StringFunctionHelpers.toStringFromUTF8(userAgent.start,
> >> userAgent.end, userAgent.buffer);
> >>
> >>
> >>             String[] capabilities = {
> >>                     "device_os",
> >>                     "device_os_version",
> >>                     "is_tablet",
> >>                     "is_wireless_device",
> >>                     "pointing_method",
> >>                     "preferred_markup",
> >>                     "resolution_height",
> >>                     "resolution_width",
> >>                     "ux_full_desktop",
> >>                     "xhtml_support_level",
> >>                     "is_smarttv",
> >>                     "can_assign_phone_number",
> >>                     "brand_name",
> >>                     "model_name",
> >>                     "marketing_name",
> >>                     "mobile_browser_version"
> >>                 };
> >>             wurfl.setEngineTarget(EngineTarget.accuracy);
> >>             wurfl.setCapabilityFilter(capabilities);
> >>             Device device = wurfl.getDeviceForRequest(SUA);
> >>             System.out.println("4-->"+new Date(
> >> System.currentTimeMillis()));
> >>             System.out.println("Device OS: " +
> >> device.getCapability("device_os"));
> >>             System.out.println("Device OS version: " +
> >> device.getCapability("device_os_version"));
> >>             System.out.println("Brand name: " +
> >> device.getCapability("brand_name"));
> >>             System.out.println("advertised_device_os_version: " +
> >> device.getCapability("advertised_device_os_version"));
> >>             System.out.println("advertised_device_os: " +
> >> device.getCapability("advertised_device_os"));
> >>             System.out.println("advertised_browser: " +
> >> device.getCapability("advertised_browser"));
> >>
> >>
> >>
> System.out.println("advertised_browser_version:"+device.getCapability("advertised_browser_version"));
> >>             stringOutValue = device.getCapability("device_os_version");
> >>
> >>
> >> Regards,
> >> Nirav
> >>
> >
> >
> >
> > --
> >
> > Abdelhakim Deneche
> >
> > Software Engineer
> >
> >   <http://www.mapr.com/>
> >
> >
> > Now Available - Free Hadoop On-Demand Training
> > <
> http://www.mapr.com/training?utm_source=Email&utm_medium=Signature&utm_campaign=Free%20available
> >
>

Re: Issue in developing UDF

Posted by Nathan Griffith <ng...@dremio.com>.
Hi Nirav!

A couple thoughts: a.) To help troubleshoot, you may want to prepend
the full path of "wurfl.xml" in the first statement of your code, b.)
So when you try to use the UDF in a query you get absolutely no error
messages from Drill?

Also, the first part of this article
(http://www.dremio.com/blog/querying-google-analytics-json-with-a-custom-sql-function/)
makes a good resource for telling Drill how to pick up on a new UDF.

Best,
Nathan

On Wed, Jan 6, 2016 at 10:23 AM, Abdel Hakim Deneche
<ad...@maprtech.com> wrote:
> According to Drill documentation:
>
> http://drill.apache.org/docs/adding-custom-functions-to-drill/
>
> You need to copy both class jar and source jar of your UDF to
> $DRILL_HOME/jars/3rdparty/
>
> did you do it ?
>
> On Tue, Jan 5, 2016 at 11:58 PM, Nirav Shah <ni...@games24x7.com>
> wrote:
>
>> Hi ,
>>
>>
>> I am trying to extract info from user agent using WURFL libraries.
>>
>> I am not sure what's wrong I am doing here but it's not working and not
>> giving any errors as well.
>>
>> I have put wurfl.xml in source folder and  wurfl<version>.jar to
>> /jar/3rdparty/
>>
>> *Code :*
>>
>>         wurfl = new
>> net.sourceforge.wurfl.core.GeneralWURFLEngine("wurfl.xml");
>>             String SUA =
>>
>> org.apache.drill.exec.expr.fn.impl.StringFunctionHelpers.toStringFromUTF8(userAgent.start,
>> userAgent.end, userAgent.buffer);
>>
>>
>>             String[] capabilities = {
>>                     "device_os",
>>                     "device_os_version",
>>                     "is_tablet",
>>                     "is_wireless_device",
>>                     "pointing_method",
>>                     "preferred_markup",
>>                     "resolution_height",
>>                     "resolution_width",
>>                     "ux_full_desktop",
>>                     "xhtml_support_level",
>>                     "is_smarttv",
>>                     "can_assign_phone_number",
>>                     "brand_name",
>>                     "model_name",
>>                     "marketing_name",
>>                     "mobile_browser_version"
>>                 };
>>             wurfl.setEngineTarget(EngineTarget.accuracy);
>>             wurfl.setCapabilityFilter(capabilities);
>>             Device device = wurfl.getDeviceForRequest(SUA);
>>             System.out.println("4-->"+new Date(
>> System.currentTimeMillis()));
>>             System.out.println("Device OS: " +
>> device.getCapability("device_os"));
>>             System.out.println("Device OS version: " +
>> device.getCapability("device_os_version"));
>>             System.out.println("Brand name: " +
>> device.getCapability("brand_name"));
>>             System.out.println("advertised_device_os_version: " +
>> device.getCapability("advertised_device_os_version"));
>>             System.out.println("advertised_device_os: " +
>> device.getCapability("advertised_device_os"));
>>             System.out.println("advertised_browser: " +
>> device.getCapability("advertised_browser"));
>>
>>
>> System.out.println("advertised_browser_version:"+device.getCapability("advertised_browser_version"));
>>             stringOutValue = device.getCapability("device_os_version");
>>
>>
>> Regards,
>> Nirav
>>
>
>
>
> --
>
> Abdelhakim Deneche
>
> Software Engineer
>
>   <http://www.mapr.com/>
>
>
> Now Available - Free Hadoop On-Demand Training
> <http://www.mapr.com/training?utm_source=Email&utm_medium=Signature&utm_campaign=Free%20available>

Re: Issue in developing UDF

Posted by Abdel Hakim Deneche <ad...@maprtech.com>.
According to Drill documentation:

http://drill.apache.org/docs/adding-custom-functions-to-drill/

You need to copy both class jar and source jar of your UDF to
$DRILL_HOME/jars/3rdparty/

did you do it ?

On Tue, Jan 5, 2016 at 11:58 PM, Nirav Shah <ni...@games24x7.com>
wrote:

> Hi ,
>
>
> I am trying to extract info from user agent using WURFL libraries.
>
> I am not sure what's wrong I am doing here but it's not working and not
> giving any errors as well.
>
> I have put wurfl.xml in source folder and  wurfl<version>.jar to
> /jar/3rdparty/
>
> *Code :*
>
>         wurfl = new
> net.sourceforge.wurfl.core.GeneralWURFLEngine("wurfl.xml");
>             String SUA =
>
> org.apache.drill.exec.expr.fn.impl.StringFunctionHelpers.toStringFromUTF8(userAgent.start,
> userAgent.end, userAgent.buffer);
>
>
>             String[] capabilities = {
>                     "device_os",
>                     "device_os_version",
>                     "is_tablet",
>                     "is_wireless_device",
>                     "pointing_method",
>                     "preferred_markup",
>                     "resolution_height",
>                     "resolution_width",
>                     "ux_full_desktop",
>                     "xhtml_support_level",
>                     "is_smarttv",
>                     "can_assign_phone_number",
>                     "brand_name",
>                     "model_name",
>                     "marketing_name",
>                     "mobile_browser_version"
>                 };
>             wurfl.setEngineTarget(EngineTarget.accuracy);
>             wurfl.setCapabilityFilter(capabilities);
>             Device device = wurfl.getDeviceForRequest(SUA);
>             System.out.println("4-->"+new Date(
> System.currentTimeMillis()));
>             System.out.println("Device OS: " +
> device.getCapability("device_os"));
>             System.out.println("Device OS version: " +
> device.getCapability("device_os_version"));
>             System.out.println("Brand name: " +
> device.getCapability("brand_name"));
>             System.out.println("advertised_device_os_version: " +
> device.getCapability("advertised_device_os_version"));
>             System.out.println("advertised_device_os: " +
> device.getCapability("advertised_device_os"));
>             System.out.println("advertised_browser: " +
> device.getCapability("advertised_browser"));
>
>
> System.out.println("advertised_browser_version:"+device.getCapability("advertised_browser_version"));
>             stringOutValue = device.getCapability("device_os_version");
>
>
> Regards,
> Nirav
>



-- 

Abdelhakim Deneche

Software Engineer

  <http://www.mapr.com/>


Now Available - Free Hadoop On-Demand Training
<http://www.mapr.com/training?utm_source=Email&utm_medium=Signature&utm_campaign=Free%20available>