Looks like it's caused by HIVE-7314. Could you try that with "hive.cache.expr.evaluation=false"?
Thanks, Navis 2014-07-24 14:34 GMT+09:00 丁桂涛(桂花) <dinggui...@baixing.com>: > 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! >>> >>> -- >>> 丁桂涛 >>> >> >> > > > -- > 丁桂涛 >