【问题标题】:Selecting columns from a hive/sql table dynamically从 hive/sql 表中动态选择列
【发布时间】:2015-04-02 14:08:56
【问题描述】:

我是 hive 的新手,同样也是 sql 的新手。因此,如果我以不恰当的方式实施我的解决方案,请赐教。

我的应用程序将 ID 作为用户的输入。然后我需要在Table1中查看它对应的Pname值,然后根据pname的值,需要从Table2中取出对应的列。

换句话说,我需要这样的查询: SELECT (SELECT Pname FROM Table1 WHERE ID=1) FROM Table2 WHERE ID=1;

在 Hive 中可以进行这样的操作吗?如果没有,我可以尝试实施哪些替代解决方案?

谢谢

【问题讨论】:

    标签: mysql sql-server database hive


    【解决方案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。这是我的解决方案。

    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的记录,最后你可以把你的位置放在最后。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-04-28
      • 2017-11-19
      • 2021-10-20
      • 1970-01-01
      • 1970-01-01
      • 2021-10-08
      • 2012-03-21
      • 2012-05-01
      相关资源
      最近更新 更多