Reply
Highlighted
Contributor
Posts: 26
Registered: ‎01-07-2016
Accepted Solution

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

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.

Cloudera Employee
Posts: 307
Registered: ‎10-16-2013

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

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"

 

 

 

 

Contributor
Posts: 26
Registered: ‎01-07-2016

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

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

Explorer
Posts: 6
Registered: ‎01-12-2019

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

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.

Contributor
Posts: 26
Registered: ‎01-07-2016

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

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