我在hdfs中有两个表,我想使用impala连接它们。一个是员工日志,另一个是人力资源数据。
查询:
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_id action
2325255b login
51666164 login
51666164v login
r1211 logoff
r18552421 login
人力资源数据:
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\u id字段在两个表上都匹配,我可以做一个简单的连接,但是同一个用户的employee id后面可以有一个“b”或“v”来指定帐户是否像管理员帐户一样被提升。有些用户帐户的id前面有一个“r”,但在两个表中都是这样。
有没有一种方法可以让我执行一些where操作并在employee\u logs表中创建一个新字段,比如从employee id的末尾去掉“v”和“b”,然后加入,还是有更好的方法?
3条答案
按热度按时间hrysbysz1#
您可以像上面那样使用子查询,因为您在employee\u日志本身中拥有所需的大多数记录,并引用公共id来获取每个记录的名称。或左连接是在这种情况下使用的最佳方法,因为well-means将给出两个表共用的数据,保持左表数据为多数
fkvaft9z2#
也许最安全的方法是多重的
left
连接:ymzxtsji3#
使用
regexp_replace
在join
条件,替换位置b
或者v
在字符串的末尾使用一个空字符串来匹配雇员id。