Yes. The output is correct: ["tp","p","sp"]. I developed the UDF using JAVA in eclipse and exported the jar file into the auxlib directory of hive. Then add the following line into the ~/.hiverc file.
create temporary function getad as 'xxxxxxx'; The hive version is 0.12.0. Perhaps the problem resulted from the mis-optimization of hive. On Thu, Jul 24, 2014 at 1:11 PM, Jie Jin <hellojin...@gmail.com> wrote: > 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! >> >> -- >> 丁桂涛 >> > > -- 丁桂涛