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


-- 
丁桂涛

Reply via email to