Sql 使用Impala连接id字段上的两个表
我在HDFS中有两个表,我想使用Impala连接它们。一个是员工日志,另一个是人力资源数据 查询:Sql 使用Impala连接id字段上的两个表,sql,impala,Sql,Impala,我在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
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_id字段都匹配,我可以进行简单的连接,但是同一个用户可以在其employee id后面有一个“b”或“v”,以指定帐户是否像管理员帐户一样提升。某些用户帐户的id前面有一个“r”,但这两个表都是这样
是否有一种方法可以执行一些where操作并在Employee_Logs表中创建一个新字段,例如从员工id的末尾去掉“v”和“b”,然后加入?或者有更好的方法吗?可能最安全的方法是多个
左
加入:
select el.*,
coalesce(h.name, hv.name, hb.name) as name
from employee_logs el left join
hr_data h
on el.employee_id = h.employee_id left join
hr_data hv
on el.employee_id = concat(h.employee_id, 'v') left join
hr_data hb
on el.employee_id = concat(h.employee_id, 'b');
最安全的方法可能是多个
left
连接:
select el.*,
coalesce(h.name, hv.name, hb.name) as name
from employee_logs el left join
hr_data h
on el.employee_id = h.employee_id left join
hr_data hv
on el.employee_id = concat(h.employee_id, 'v') left join
hr_data hb
on el.employee_id = concat(h.employee_id, 'b');
您可以如上所述使用子查询,因为您在Employee_日志本身中拥有所需的大多数记录,并引用公共ID来获取每个记录的名称。
在这种情况下,最好使用Or Left join,因为well-Means将提供两个表共用的数据,并保持左表数据为多数
您可以如上所述使用子查询,因为您在Employee_日志本身中拥有所需的大多数记录,并引用公共ID来获取每个记录的名称。
在这种情况下,最好使用Or Left join,因为well-Means将提供两个表共用的数据,并保持左表数据为多数
在
join
条件中使用regexp\u replace
,将字符串末尾的b
或v
替换为与员工id匹配的空字符串
select el.employee_id,el.action,hr.name
from employee_logs el
join hr_data hr on hr.employee_id = regexp_replace(el.employee_id,'[bv]$','')
在
join
条件中使用regexp\u replace
,将字符串末尾的b
或v
替换为与员工id匹配的空字符串
select el.employee_id,el.action,hr.name
from employee_logs el
join hr_data hr on hr.employee_id = regexp_replace(el.employee_id,'[bv]$','')
我试着在impala中找到trim函数,它显示了idk的某个地方,我找到了trim(),不过我可以检查上面的查询现在是否有效。或者,您可以使用regexp将employee_id替换为字符“我尝试在impala中查找trim函数,它显示了idk的某个地方,我找到了trim(),但您可以检查上述查询现在是否有效。或者,您可以使用regexp将员工ID替换为“”字符