使用映射表在多列上进行连接

问题描述 投票:0回答:1

我挺需要帮助的。我有客户表和映射表。我需要连接这两个表。场景是这样的。

表1(客户):

uid  job  level  status  
1    64   68     75
2    65   69     75
3    66   68     76

表2(mapping_table):

groupid  lookup_id  lookup_desc
1               64  biker                
1               65  stuntman                
1               66  driver  
2               68  low         
2               69  high         
3               75  individu         
3               76  corporate         

查询:

select
      uid,b.lookup_desc job,
      c.lookup_desc level,
      d.lookup_desc status
from 
      customer a
left join mapping_table b on a.job = b.lookup_id
left join mapping_table c on a.job = c.lookup_id
left join mapping_table d on a.job = d.lookup_id

我知道这个查询是可以运行的,但我想把它变成 更简单、更快速 或也许u有任何建议与我的查询吗? 或该查询是最好的方法(三左连接)?

我在Hiveql上工作。

任何帮助将是感激;)

mysql sql hive hiveql
1个回答
2
投票

我假设你不希望查询重复三次工作,所以我想你的意思是。

select c.uid, j.lookup_desc as job,
       l.lookup_desc as level,
       s.lookup_desc as status
from customer c left join
     mapping_table j
     on c.job = j.lookup_id left join
     mapping_table l
     on c.level= l.lookup_id left join
     mapping_table s
     on c.status= s.lookup_id;

我做的另一个改变是使用有意义的表别名 -- 这会影响代码的清晰度,但不会影响性能。

否则,你的代码是没有问题的。

在大多数数据库中,你会希望在以下表上有一个索引 mapping_table(lookup_id, lookup_desc). 然而,我不认为这样的索引在Hive中会有帮助。


0
投票

为了让这个速度更快,我唯一要做的事情(从你的例子中)是在 客户.工作mapping_table.lookup_id

© www.soinside.com 2019 - 2024. All rights reserved.