Recently I developed a Hive Generic UDF *getad*. It accepts a map type and
a string type parameter and outputs a string value. But I found the UDF
output really confusing in different conditions.

Condition A:

select
  getad(map_col, 'tp') as tp,
  getad(map_col, 'p') as p,
  getad(map_col, 'sp') as sp
from
  table_name
where
  id = xxxx;

The output is right: 'tp', 'p', 'sp'.

Condition B:

select
  array(tp, p, sp) as ps
from
  (
  select
    getad(map_col, 'tp') as tp,
    getad(map_col, 'p') as p,
    getad(map_col, 'sp') as sp
  from
    table_name
  where
    id = xxxx
  ) t;

The output is wrong: 'tp', 'tp', 'tp'. And the following query outputs the
same result:

select
  array(
    getad(map_col, 'tp'),
    getad(map_col, 'p'),
    getad(map_col, 'sp')
  ) as ps
from
  table_name
where
  id = xxxx;

Could you please provide me some hints on this? Thanks!

-- 
丁桂涛

Reply via email to