Hive 在配置单元中使用左外部联接或存在的位置进行子查询

Hive 在配置单元中使用左外部联接或存在的位置进行子查询,hive,hiveql,Hive,Hiveql,我正在尝试执行多个嵌套子查询。首先查找带有角色Person的小写名称,然后查找这些人拥有的会话ID。有了这个会话ID列表,我想根据这些会话ID中的所有结果过滤原始查询 我能够让子查询自己工作,并生成会话id列表,我尝试在子查询中使用where session_id,但这不起作用。我也尝试过执行类似于where exists或left-outer-join的操作,但我无法让它们中的任何一个正常工作。在left-outer-join之后,保留您写入M的所有查询的别名,然后再次运行查询 尝试运行以下查

我正在尝试执行多个嵌套子查询。首先查找带有角色Person的小写名称,然后查找这些人拥有的会话ID。有了这个会话ID列表,我想根据这些会话ID中的所有结果过滤原始查询

我能够让子查询自己工作,并生成会话id列表,我尝试在子查询中使用where session_id,但这不起作用。我也尝试过执行类似于where exists或left-outer-join的操作,但我无法让它们中的任何一个正常工作。

在left-outer-join之后,保留您写入M的所有查询的别名,然后再次运行查询

尝试运行以下查询:


这成功了!非常感谢你。你能解释一下为什么我需要保留别名吗?写子查询的规则之一是子查询必须始终出现在括号内,你可以将子查询嵌入另一个子查询中。你可以有你需要的任意级别。当我们保留别名nameM时,所有子查询都将被视为表M。太棒了,谢谢您的解释。这更清楚了!
select 
U.session_id,
U.session_date,
U.email
from data.usage U
left outer join
  select 
  distinct M.session_id
  from data.usage M
  where email like '%gmail.com%'
  and data_date >= '20180101'
  and name in
    ( 
    select 
    lower(name)
    from data.users
    where role like 'Person%' 
    and isactive = TRUE
    and data_date = '20180412'
    )
on U.session_id = M.session_id
select 
U.session_id,
U.session_date,
U.email
from data.usage U
left outer join
  (select 
  distinct M.session_id
  from data.usage M
  where email like '%gmail.com%'
  and data_date >= '20180101'
  and name in
    ( 
    select 
    lower(name)
    from data.users
    where role like 'Person%' 
    and isactive = TRUE
    and data_date = '20180412'
    ))M
on U.session_id = M.session_id