我是一个新手在蜂巢和同样的新手在SQL。因此,如果我以不适当的方式实施我的解决方案,请启发我。
我的应用程序接受用户输入的id。然后我需要检查表1中与其对应的pname值,然后根据pname的值,需要从表2中获取相应的列。
换句话说,我需要这样一个查询:
SELECT (SELECT Pname FROM Table1 WHERE ID=1) FROM Table2 WHERE ID=1;
这样的手术在蜂巢里可能吗?如果没有,我可以尝试实现什么替代解决方案?
谢谢

最佳答案

您可以将表2转换为此表单(表3):

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

如果你不知道如何构造表3,这是我的解决方案。
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

最后,如果你只想得到一个身份证的记录,你可以把你的位置放在最后。

关于mysql - 从Hive/SQL表中动态选择列,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29415018/

10-10 20:33