Hi Arina, 
Thank you for your assistance on this.  I’m also having issues with another 
UDF. This one is an aggregate function and I can’t seem to get Drill to 
recognize it.  Here’s the repo if you wouldn’t mind taking a look.   
https://github.com/cgivre/drill-stats-function 
<https://github.com/cgivre/drill-stats-function> I wasn’t trying to add this 
dynamically. 
Thanks,
— C

> On Jan 31, 2017, at 05:59, Arina Yelchiyeva <[email protected]> 
> wrote:
> 
> Hi Charles,
> 
> yes you can. For example, you can create my.txt in your jar resource folder.
> From code you may load its content using:
> getClass().getClassLoader().getResourceAsStream("my.txt").
> But this will work only for functions loaded during drillbit startup (when
> you add jars in drillbit classpath).
> Won't work for dynamically loaded functions, since these functions have
> custom classloader.
> 
> Kind regards
> Arina
> 
> 
> On Mon, Jan 30, 2017 at 5:18 PM, Charles Givre <[email protected]> wrote:
> 
>> Hi Arina,
>> Thank you very much for taking a look.  I actually got it to work last
>> night and found that the cause of the error was that I was not initializing
>> the @Workspace parameters correctly.
>> I had another question which I was wondering if you might be able to
>> assist with.  I’m not a Java developer by trade so forgive me if this is a
>> total n00b question, but obviously, I don’t want to hard-code the path to
>> that database.  Is there an easy way that I can include it the resources
>> file, have it bundled with the JAR and then include a relative path, or
>> something like that?
>> Thanks,
>> — C
>> 
>> 
>> 
>>> On Jan 30, 2017, at 05:25, Arina Yelchiyeva <[email protected]>
>> wrote:
>>> 
>>> Hi Charles,
>>> 
>>> 1. drill-module.conf: should be the following:
>>> *drill.classpath.scanning.packages
>>> += "org.apache.drill.contrib.function"*
>>> 2. when I have built the jars and tried to register functions, I got the
>>> following error: org.apache.drill.common.exceptions.
>> DrillRuntimeException:
>>> Unexpected class load failure while attempting to load Function Registry
>>> (com.maxmind.geoip2.DatabaseReader), so I have copied two jars into
>>> <drill>/jars
>>> folder: maxmind-db-1.2.1.jar and geoip2-2.8.0.jar and function seems to
>>> work fine (well, could not read DB but it's expected since you have
>>> hard-coded your local path in your function code: java.io.File database =
>>> new
>>> java.io.File("/Users/cgivre/OneDrive/github/drillworkshop/
>> GeoLite2/GeoLite2-City.mmdb");).
>>> I guess these jars should be present in drill classpath at startup
>> despite
>>> the the way you register functions (dynamic or not).
>>> 
>>> 0: jdbc:drill:zk=local> create function using jar
>>> 'drill-geoip-functions-1.0.jar';
>>> +----+---------+
>>> | ok | summary |
>>> +----+---------+
>>> | true | The following UDFs in jar drill-geoip-functions-1.0.jar have
>> been
>>> registered:
>>> [getcountryname(VARCHAR-OPTIONAL), getcityname(VARCHAR-REQUIRED)] |
>>> +----+---------+
>>> 1 row selected (1.083 seconds)
>>> 
>>> 0: jdbc:drill:zk=local> select getCityName('A') from sys.version;
>>> IOException encountered:  Could not read MaxMind DBIOException
>> encountered:
>>> Could not read MaxMind DB+----------+
>>> |  EXPR$0  |
>>> +----------+
>>> | Unknown  |
>>> +----------+
>>> 
>>> 
>>> Kind regards
>>> Arina
>>> 
>>> 
>>> On Sun, Jan 29, 2017 at 2:41 AM, Charles Givre <[email protected]> wrote:
>>> 
>>>> HI Arina,
>>>> I’m still getting weird errors.
>>>> 
>>>> Here’s my UDF: https://github.com/cgivre/drill-geoip-functions <
>>>> https://github.com/cgivre/drill-geoip-functions>
>>>> 
>>>> I build it using: mvn clean package -DskipTests and it builds fine.  I
>>>> copy the .jar files it creates to <drill>/jars/3rdparty, but when I try
>> to
>>>> execute a query, I get:
>>>> 
>>>> Query Failed: An Error Occurred
>>>> org.apache.drill.common.exceptions.UserRemoteException: VALIDATION
>> ERROR:
>>>> From line 1, column 19 to line 1, column 42: No match found for function
>>>> signature getCityName() SQL Query null [Error Id:
>> deb83448-db82-4351-b95d-f183c25efb0b
>>>> on charless-mbp-2.fios-router.home:31010]
>>>> 
>>>> Would you mind taking a quick look at my code?  I have a feeling this is
>>>> something simple and obvious, like a wrong path somewhere.  I’ve written
>>>> other UDFs before and gotten them to work, so I’m a little stuck.
>>>> Thanks,
>>>> — Charles
>>>> 
>>>> 
>>>> 
>>>>> On Jan 28, 2017, at 08:22, Arina Yelchiyeva <
>> [email protected]>
>>>> wrote:
>>>>> 
>>>>> Hi Charles,
>>>>> 
>>>>> drill-module.conf file should be placed in src/main/resources folder.
>>>>> Example:
>>>>> https://github.com/arina-ielchiieva/drillUDF/blob/
>>>> master/src/main/resources/drill-module.conf
>>>>> 
>>>>> 
>>>>> Kind regards
>>>>> Arina
>>>>> 
>>>>> On Fri, Jan 27, 2017 at 10:50 PM, Charles Givre <[email protected]>
>>>> wrote:
>>>>> 
>>>>>> I’m having some trouble registering a UDF I wrote.  The UDF was
>> working
>>>> in
>>>>>> previous versions of Drill and now Drill doesn’t seem to recognize it.
>>>>>> When I try to register it I get the following error:
>>>>>> 
>>>>>> : jdbc:drill:zk=local> create function using jar
>>>>>> 'drill-geoip-functions-1.0.jar';
>>>>>> +--------+--------------------------------------------------
>>>> -------------+
>>>>>> |   ok   |                            summary
>>>> |
>>>>>> +--------+--------------------------------------------------
>>>> -------------+
>>>>>> | false  | Jar drill-geoip-functions-1.0.jar does not contain
>>>> functions  |
>>>>>> +--------+--------------------------------------------------
>>>> -------------+
>>>>>> 
>>>>>> I do have a drill-module.conf file and here are the contents:
>>>>>> drill.classpath.scanning.packages += "org.apache.drill.contrib.
>>>> function"
>>>>>> I tried moving this file around and I put a copy in the /src folder as
>>>>>> well as the /src/main folder to no avail.  Any suggestions?
>>>>>> Thanks,
>>>>>> — Charles
>>>>>> 
>>>>>> 
>>>>>> 
>>>>>> 
>>>>>> 
>>>>>> 
>>>> 
>>>> 
>> 
>> 

Reply via email to