首页 > 解决方案 > 使用 Impala 在 id 字段上连接两个表

问题描述

我想使用 Impala 加入 HDFS 中有两个表。一个是 Employee_Logs,另一个是 HR_Data。

查询:

select e.employee_id, e.action from Employee_Logs e where e.employment_status_desc = 'Active'
select h.employee_id, h.name from HR_Data h

Employee_Logs:

employee_id  action
2325255b     login     
51666164     login
51666164v    login
r1211        logoff
r18552421    login

HR_数据:

employee_id  name
2325255      Rob    
51666164     Tom
r1211        Tammy
r18552421    Ron

我想加入他们,使数据看起来像这样:

employee_id  action  name
2325255b     login   Rob  
51666164     login   Tom
51666164v    login   Tom
r1211        logoff  Tammy
r18552421    login   Ron

如果两个表上的employee_id 字段都匹配,我可以轻松加入,但是同一用户可以在其员工ID 后面有一个“b”或“v”来指定该帐户是否像管理员帐户一样被提升。一些用户帐户在 id 前面有一个“r”,但在两个表中都是这种情况。

有没有一种方法可以让我执行一些操作并在 Employee_Logs 表中创建一个新字段,例如从员工 ID 的末尾去掉“v”和“b”然后加入,还是有更好的方法?

标签: sqlimpala

解决方案


   Select employee_id,action,h1.name from Employee_Logs 
   where RTRIM(employee_id,'b','v'),name IN (Select employee_id,name 
   from HR_DATA as h1);

您可以使用上述子查询,因为您拥有 Employee_logs 本身所需的大部分记录,并参考公共 ID 来获取每条记录的名称。或者左连接是在这种情况下最好使用的,这意味着将给出两个表共有的数据,保持左表数据为多数


推荐阅读