我挺需要帮助的。我有客户表和映射表。我需要连接这两个表。场景是这样的。
表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上工作。
任何帮助将是感激;)
我假设你不希望查询重复三次工作,所以我想你的意思是。
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中会有帮助。
为了让这个速度更快,我唯一要做的事情(从你的例子中)是在 客户.工作 和 mapping_table.lookup_id