我想创建一个Hive UDF函数,该函数根据某些值返回特定的列名称,例如retreivecol(age)。如果年龄为20,则返回要在select name中使用的列名列表,如'name,email, fbuserid,朋友列表'等,如果年龄小于20,则单独返回'name'。所以我希望我的HIVE QL查询看起来像
从User_Data中选择retreivecol(年龄);
上面的查询只打印“name,email,fbuserid,friendslist”等列的名称,而不是将它们视为列名并基于相同的过滤。任何指针都很受欢迎。
答案 0 :(得分:0)
我不确定UDF是否适合这样做,因为UDF只是看到传递给它们的值,它们实际上无法访问整个表结构。
相反,您可以在嵌套表中执行此操作吗?
select name,email,id FROM
(
select
name,
if(age < 20, email, NULL) as email,
if(age < 20, id, NULL) as id
FROM mytable
) a