我是hive的新手,也是sql中的新手。所以,如果我以不恰当的方式实施我的解决方案,请赐教。
我的应用程序将ID作为用户的输入。然后我需要检查Table1中对应的Pname值,然后根据pname的值,需要从Table2中获取相应的列。
换句话说,我需要这样的查询:
SELECT (SELECT Pname FROM Table1 WHERE ID=1) FROM Table2 WHERE ID=
1;
Hive可以进行这样的操作吗?如果没有,我可以尝试实施哪种替代解决方案?
由于
答案 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的记录,最后你可以把你的地方放在最后。