2015-04-02 61 views
1

我是一個新手,同樣也是sql中的新手。因此,如果我以不恰當的方式實施我的解決方案,請賜教。動態地從配置單元/ sql表中選擇列

Table Structure

我的應用程序需要ID作爲從用戶輸入。然後我需要檢查表1中對應於它的Pname值,然後根據pname的值,需要從Table2中獲取相應的列。

換句話說,我需要這樣一個查詢: SELECT (SELECT Pname FROM Table1 WHERE ID=1) FROM Table2 WHERE ID= 1;

Hive中可以這樣操作嗎?如果沒有,我可以嘗試採用哪種替代解決方案?

感謝

回答

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 

如果你不知道如何構建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的記錄。