动态选择hive / sql表中的列

时间:2015-04-02 14:08:56

标签: mysql sql-server database hive

我是hive的新手,也是sql中的新手。所以,如果我以不恰当的方式实施我的解决方案,请赐教。

Table Structure

我的应用程序将ID作为用户的输入。然后我需要检查Table1中对应的Pname值,然后根据pname的值,需要从Table2中获取相应的列。

换句话说,我需要这样的查询: SELECT (SELECT Pname FROM Table1 WHERE ID=1) FROM Table2 WHERE ID= 1;

Hive可以进行这样的操作吗?如果没有,我可以尝试实施哪种替代解决方案?

由于

1 个答案:

答案 0 :(得分:1)

您可以将table2转换为此表单(table3):

ID  Pname  Pval
1   par1   10
1   par2   15

等等。

然后使用像

这样的连接
select table1.*, table3.pval
from table1 join table3 
on table1.id = table3.id and table1.pname = table3.pname

如果你不知道如何构建table3.Here是我的解决方案。

select id, pname, pval
from table2 lateral view 
explode(map('par1', Par1, 'par2', Par2, 'par3', Par3)) t as pname,pval

所以最终的sql是

select table1.*, table3.pval
from table1 join (
select id, pname, pval
from table2 lateral view 
explode(map('par1', Par1, 'par2', Par2, 'par3', Par3)) t as pname,pval)
table3 
on table1.id = table3.id and table1.pname = table3.pname

如果你只想获得一个id的记录,最后你可以把你的地方放在最后。