Have you tried this query without UDF, say:

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


​And how you implement the UDF?​


谢谢
金杰 (Jie Jin)


On Wed, Jul 23, 2014 at 1:34 PM, 丁桂涛(桂花) <dinggui...@baixing.com> wrote:

> 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