Hi Nathan,
No luck. this is also not working.
😢😢

regards,
Nirav

On Mon, Jan 11, 2016 at 12:56 AM, Nathan Griffith <[email protected]>
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 <[email protected]>
> 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" <[email protected]> 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 <[email protected]>
> >> 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 <[email protected]
> >
> >> > 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
> >> >> <[email protected]> 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 <
> [email protected]
> >> >
> >> >> > 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
> >> >> >
> >> >>
> >>
>

Reply via email to