[ 
https://issues.apache.org/jira/browse/PHOENIX-2151?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14660892#comment-14660892
 ] 

Anchal Agrawal commented on PHOENIX-2151:
-----------------------------------------

This is not reproducible when both UDFs don't operate on PK.

UDF3: create function udf3(VARBINARY) returns INTEGER as 'mypkg.GetZ';

Query5: select udf1(pk), udf3(col) from "mytable";
Output, as expected:
===================================================
UDF1(PK) | UDF3(cf."col")
===================================================
| <UDF1 Value> | <UDF3 Value>

However, when I try to do something like: select udf1(pk), udf3(col) from 
"mytable" where udf3(col) = 2;
I get an exception (below). There's a ClassNotFoundException, but the same 
class is used in Query5 (above) and it works. All my UDFs are packaged in a 
single jar.

===================================================
UDF1(PK) | UDF3(cf."col")
===================================================
java.lang.RuntimeException: org.apache.phoenix.exception.PhoenixIOException: 
org.apache.phoenix.exception.PhoenixIOException: 
org.apache.hadoop.hbase.DoNotRetryIOException: 
java.lang.reflect.InvocationTargetException
        at 
org.apache.hadoop.hbase.protobuf.ProtobufUtil.toFilter(ProtobufUtil.java:1383)
        at 
org.apache.hadoop.hbase.protobuf.ProtobufUtil.toScan(ProtobufUtil.java:931)
        at 
org.apache.hadoop.hbase.regionserver.HRegionServer.scan(HRegionServer.java:3160)
        at 
org.apache.hadoop.hbase.protobuf.generated.ClientProtos$ClientService$2.callBlockingMethod(ClientProtos.java:29941)
        at org.apache.hadoop.hbase.ipc.RpcServer.call(RpcServer.java:2027)
        at org.apache.hadoop.hbase.ipc.CallRunner.run(CallRunner.java:108)
        at 
org.apache.hadoop.hbase.ipc.RpcExecutor.consumerLoop(RpcExecutor.java:110)
        at org.apache.hadoop.hbase.ipc.RpcExecutor$1.run(RpcExecutor.java:90)
        at java.lang.Thread.run(Thread.java:745)
Caused by: java.lang.reflect.InvocationTargetException
        at sun.reflect.GeneratedMethodAccessor47.invoke(Unknown Source)
        at 
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:483)
        at 
org.apache.hadoop.hbase.protobuf.ProtobufUtil.toFilter(ProtobufUtil.java:1379)
        ... 8 more
Caused by: org.apache.hadoop.hbase.exceptions.DeserializationException: 
org.apache.hadoop.hbase.DoNotRetryIOException: 
java.lang.reflect.InvocationTargetException
        at 
org.apache.hadoop.hbase.filter.FilterList.parseFrom(FilterList.java:419)
        ... 12 more
Caused by: org.apache.hadoop.hbase.DoNotRetryIOException: 
java.lang.reflect.InvocationTargetException
        at 
org.apache.hadoop.hbase.protobuf.ProtobufUtil.toFilter(ProtobufUtil.java:1383)
        at 
org.apache.hadoop.hbase.filter.FilterList.parseFrom(FilterList.java:416)
        ... 12 more
Caused by: java.lang.reflect.InvocationTargetException
        at sun.reflect.GeneratedMethodAccessor55.invoke(Unknown Source)
        at 
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:483)
        at 
org.apache.hadoop.hbase.protobuf.ProtobufUtil.toFilter(ProtobufUtil.java:1379)
        ... 13 more
Caused by: org.apache.hadoop.hbase.exceptions.DeserializationException: 
org.apache.hadoop.hbase.DoNotRetryIOException: BooleanExpressionFilter failed 
during reading: java.lang.ClassNotFoundException: mypkg.GetZ
        at 
org.apache.phoenix.filter.SingleCQKeyValueComparisonFilter.parseFrom(SingleCQKeyValueComparisonFilter.java:55)
        ... 17 more
Caused by: org.apache.hadoop.hbase.DoNotRetryIOException: 
BooleanExpressionFilter failed during reading: 
java.lang.ClassNotFoundException: mypkg.GetZ
        at 
org.apache.phoenix.util.ServerUtil.createIOException(ServerUtil.java:84)
        at 
org.apache.phoenix.util.ServerUtil.throwIOException(ServerUtil.java:52)
        at 
org.apache.phoenix.filter.BooleanExpressionFilter.readFields(BooleanExpressionFilter.java:108)
        at 
org.apache.phoenix.filter.SingleKeyValueComparisonFilter.readFields(SingleKeyValueComparisonFilter.java:136)
        at 
org.apache.hadoop.hbase.util.Writables.getWritable(Writables.java:131)
        at 
org.apache.hadoop.hbase.util.Writables.getWritable(Writables.java:101)
        at 
org.apache.phoenix.filter.SingleCQKeyValueComparisonFilter.parseFrom(SingleCQKeyValueComparisonFilter.java:53)
        ... 17 more
Caused by: java.lang.RuntimeException: java.lang.ClassNotFoundException: 
mypkg.GetZ
        at 
org.apache.phoenix.expression.function.UDFExpression.constructUDFFunction(UDFExpression.java:170)
        at 
org.apache.phoenix.expression.function.UDFExpression.readFields(UDFExpression.java:158)
        at 
org.apache.phoenix.expression.BaseCompoundExpression.readFields(BaseCompoundExpression.java:110)
        at 
org.apache.phoenix.expression.ComparisonExpression.readFields(ComparisonExpression.java:341)
        at 
org.apache.phoenix.filter.BooleanExpressionFilter.readFields(BooleanExpressionFilter.java:106)
        ... 21 more
Caused by: java.lang.ClassNotFoundException: mypkg.GetZ
        at java.net.URLClassLoader$1.run(URLClassLoader.java:372)
        at java.net.URLClassLoader$1.run(URLClassLoader.java:361)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(URLClassLoader.java:360)
        at 
org.apache.hadoop.hbase.util.DynamicClassLoader.loadClass(DynamicClassLoader.java:147)
        at 
org.apache.phoenix.expression.function.UDFExpression.constructUDFFunction(UDFExpression.java:164)
        ... 25 more

        at sqlline.IncrementalRows.hasNext(IncrementalRows.java:73)
        at sqlline.TableOutputFormat.print(TableOutputFormat.java:33)
        at sqlline.SqlLine.print(SqlLine.java:1653)
        at sqlline.Commands.execute(Commands.java:833)
        at sqlline.Commands.sql(Commands.java:732)
        at sqlline.SqlLine.dispatch(SqlLine.java:808)
        at sqlline.SqlLine.begin(SqlLine.java:681)
        at sqlline.SqlLine.start(SqlLine.java:398)
        at sqlline.SqlLine.main(SqlLine.java:292)

> Two different UDFs called on same column return values from first UDF only
> --------------------------------------------------------------------------
>
>                 Key: PHOENIX-2151
>                 URL: https://issues.apache.org/jira/browse/PHOENIX-2151
>             Project: Phoenix
>          Issue Type: Bug
>    Affects Versions: 4.4.0
>         Environment: Phoenix 4.4.0
> HBase 0.98_13
> Java 7
> Ubuntu 14.04.1 X64
>            Reporter: Nicholas Whitehead
>            Assignee: Rajeshbabu Chintaguntla
>            Priority: Critical
>
> I have defined two different UDFs, say FOO(varchar) and BAR(varchar).
> If I execute a query such as:
> SELECT PK, FOO(NAME), BAR(NAME) FROM USERS, I get:
> ===================================================
>        PK              |              FOO                  |                
> BAR
> ===================================================
> 37546               |       <Fooed Value>         |      <Fooed Value>
> If I reverse the order, I only get the Barred value (i.e. it ignores the 2nd 
> and subsequent UDF operators)
> SELECT PK, BAR(NAME), FOO(NAME) FROM USERS, I get:
> ===================================================
>        PK              |              BAR                  |                
> FOO
> ===================================================
> 37546               |       <Bared Value>         |      <Bared Value>
> Reproduced in plain command JDBC and Squirrel SQL.
> Packaged reproduction pending.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to