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! > > -- > 丁桂涛 >