繁体   English   中英

从Hive / SQL表中动态选择列

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM