[英]Selecting columns from a hive/sql table dynamically
我是蜂巢的新手,还是SQL的新手。 因此,如果我以不合适的方式实施我的解决方案,请赐教。
我的应用程序将ID作为用户的输入。 然后我需要检查表1中与之对应的Pname值,然后基于pname的值,需要从Table2中获取相应的列。
换句话说,我需要这样的查询: SELECT (SELECT Pname FROM Table1 WHERE ID=1) FROM Table2 WHERE ID=
1;
Hive中可以进行这种操作吗? 如果没有,我可以尝试实施哪种替代解决方案?
谢谢
您可以将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。这是我的解决方案。
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的记录,则可以将您的位置放到最后。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.