As stated in the documention:
UNIONTYPE support is incomplete The UNIONTYPE datatype was introduced in Hive 0.7.0 (
HIVE-537), but full support for this type in Hive remains incomplete. Queries that reference UNIONTYPE fields in JOIN (HIVE-2508), WHERE, and GROUP BY clauses will fail, and Hive does not define syntax to extract the tag or value fields of a UNIONTYPE. This means that UNIONTYPEs are effectively look-at-only.
It is essential to have a usable uniontype. Until full support is added to Hive users should at least have the ability to inspect and extract values for further comparison or transformation.
I propose to add a GenericUDF that has 2 modes of operation. Consider the following schema and data that contains a union:
This method will recursively convert all unions within the type to structs with fields named tag_n, n being the tag number. Only the tag_* field that matches the tag of the union will be populated with the value. In the case above the schema of field1 will be converted to:
This method will simply extract the value of the specified tag. If the tag number matches then the value is returned, if it does not, then null is returned.