Support Questions

Find answers, ask questions, and share your expertise

Not possible to use IS NULL / IS NOT NULL operator on structs

avatar
Rising Star

It does not seem like the IS NULL / IS NOT NULL operator is supported for struct data types. We are using Impala 2.3.0/CDH5.5.1. This seem like a basic and vital operator to have. Especially when using wide tables. Anybody out there that has a patch or workaround or that actually succeeded to use this operator on structs?

 

I have reported IMPALA-3060 on the topic.

1 ACCEPTED SOLUTION

avatar

Thanks for reporting this issue! I agree that it is an unfortunate limitation.

 

FWIW, this limitation is explained here in the docs here: http://www.cloudera.com/documentation/enterprise/latest/topics/impala_complex_types.html#complex_typ...

 

"Currently, Impala built-in functions and user-defined functions cannot accept complex types as parameters or produce them as function return values"

 

 

 

 

View solution in original post

4 REPLIES 4

avatar

Thanks for reporting this issue! I agree that it is an unfortunate limitation.

 

FWIW, this limitation is explained here in the docs here: http://www.cloudera.com/documentation/enterprise/latest/topics/impala_complex_types.html#complex_typ...

 

"Currently, Impala built-in functions and user-defined functions cannot accept complex types as parameters or produce them as function return values"

 

 

 

 

avatar
Rising Star

Thank you for your prompt reply! I will hold my attempts using this operation.

avatar
Explorer

Is there a solution to this yet ?

I am running into the same issue. I am using a IS NOT NULL clause in the Where condition and it is being ignored and rows with null values in that column are being retured by the query.

avatar
Rising Star
Hi,
 
I have not followed the development of Impala lateley.If this i still a limitation you might try the following approach.Design the schema with an additional column with information about which rows holds information for a particular struct column and then use this additional column in the WHERE clause. Something like:

name      complex1      complex2   complex3
complex1  content       NULL       NULL
complex3  NULL          NULL       content
and then:
 
SELECT complex1.*
FROM myTable
WHERE name = 'complex1'
Br,
Petter