Hive join 连接字段

Join 语句

Hive支持通常的SQL JOIN语句,但是只支持等值连接,不支持非等值连接

表1(hive_db)

id  name        money

1    Bob         1200
2    Black       2100
3    BigDataBoy    5600
4    Bob         2300
5    Bob         3200
6    Black       5600

表2(city)

name            addr

Bob                Beijing
Black           HuNan
BigDataBoy        SiChuan

查询案例

需求:表1 的姓名(name)与 表2 的 addr 合并

id  name    addr

查询语句

select
h.id, h.name, c.addr
from 
hive_db h
join    # 连接的另一张表
city c
on      # 筛选条件 不支持 or 
h.name = c.name;

查询结果

hive> select
    > h.id, h.name, c.addr
    > from 
    > hive_db h
    > join 
    > city c
    > on 
    > h.name = c.name;
Query ID = root_20200127215351_3f0945cf-dfd3-4c00-ba9a-b177cecf018f
...
MapReduce Jobs Launched: 
Stage-Stage-3: Map: 1   Cumulative CPU: 2.86 sec   HDFS Read: 6494 HDFS Write: 91 SUCCESS
Total MapReduce CPU Time Spent: 2 seconds 860 msec
OK
1    Bob    Beijing
2    Black    HuNan
3    BigDataBoy    SiChuan
4    Bob    Beijing
5    Bob    Beijing
6    Black    HuNan
Time taken: 31.054 seconds, Fetched: 6 row(s)

内连接

join

只有进行连接的两个表中满足连接条件的数据才会被保留下来。

select
h.id, h.name, c.addr
from 
hive_db h
join    
city c
on      
h.name = c.name;

左外连接

left jion

on 或者 where 筛选条件的左边的表查询字段的所有数据将会保留下来

select
h.id, h.name, c.addr
from 
hive_db h
left join    
city c
on      
h.name = c.name;

右外连接

right jion

on 或者 where 筛选条件的右边的表查询字段的所有数据将会保留下来

select
h.id, h.name, c.addr
from 
hive_db h
right join    
city c
on      
h.name = c.name;

满外连接

full jion

on 或者 where 筛选条件的两边的表查询字段的所有数据将会保留下来,任一表的指定字段没有符合条件的值用 NULL代替

select
h.id, h.name, c.addr
from 
hive_db h
full join    
city c
on      
h.name = c.name;

多表连接

注意:连接 n个表,至少需要n-1个连接条件。例如:连接三个表,至少需要两个连接条件。

发表评论 / Comment

用心评论~