Support Questions
Find answers, ask questions, and share your expertise
Announcements
Alert: Welcome to the Unified Cloudera Community. Former HCC members be sure to read and learn how to activate your account here.

Impala retries even when "SetError(const char* error_msg)" Error is set in UDF.

Solved Go to solution
Highlighted

Impala retries even when "SetError(const char* error_msg)" Error is set in UDF.

Explorer

Hi All,

 

In UDF executing the context->SetError(const char* error_msg) method impala again retries the UDF.

 

Below is my UDF:-

 

IntVal my_udf(
FunctionContext* context,
IntVal& sInput
)
{
if( sInput.val == 0 )
{
context->SetError( "Off Value" );
return 0;
}
IntVal iResult(sInput.val + 1);
return iResult;
}

 

DDL :--

CREATE FUNCTION my_udf(INTEGER) RETURNS INTEGER
LOCATION '/opt/impala/udfs/myudf.so'
SYMBOL = 'my_udf';

So if we debug this UDF using GDB.

If we add the break point at "context->SetError( "Off Value" );" this line then we come to know that if we pass 0 to this UDF this will hit the break point more than one time.

 

So please let me know that it is right behavior?


i ran this UDF in CDH 5.10 & CDH 5.11.

1 ACCEPTED SOLUTION

Accepted Solutions
Highlighted

Re: Impala retries even when "SetError(const char* error_msg)" Error is set in UDF.

I just saw this in my email backlog. Yes this is the expected behaviour. Your UDF may be called again on the same thread or a different thread. After you call SetError() the query will fail but the error will take some time to propagate.

View solution in original post

1 REPLY 1
Highlighted

Re: Impala retries even when "SetError(const char* error_msg)" Error is set in UDF.

I just saw this in my email backlog. Yes this is the expected behaviour. Your UDF may be called again on the same thread or a different thread. After you call SetError() the query will fail but the error will take some time to propagate.

View solution in original post

Don't have an account?
Coming from Hortonworks? Activate your account here