hive中full join
时间: 2025-01-23 17:02:33 浏览: 52
### Hive FULL JOIN 使用方法
在Hive中,`FULL JOIN`是一种连接操作,它会返回左表和右表中的所有记录。如果某张表中不存在匹配,则结果集中相应的列将包含NULL值。
对于涉及多个表的情况,可以使用如下SQL语句来执行带有多个关联键的`FULL JOIN`:
```sql
SELECT *
FROM tmp.tmp_fulljoin_tablea a
FULL JOIN tmp.tmp_fulljoin_tableb b ON a.key1 = b.key1
FULL JOIN tmp.tmp_fulljoin_tablec c ON COALESCE(a.key1, b.key1) = c.key1;
```
上述代码展示了如何基于共同的关键字`key1`对三个不同的临时表进行完全外联接[^4]。
当处理两个具体业务逻辑相关的表时,比如员工信息表与薪资详情表之间的关系,可以通过公共字段如ID来进行完整的外部链接,从而获取到即使一方缺失另一方存在的全部记录条目。
需要注意的是,在实际应用过程中应当谨慎对待`FULL JOIN`的选择,因为这可能会导致大量的笛卡尔积运算,进而影响性能表现。因此建议仅在确实需要保留两侧不匹配的数据项的情况下才采用这种方式[^2]。
为了更好地理解并掌握这一概念,下面给出一个更贴近现实场景的例子:假设有两张分别存储用户基本信息(`ods_user_info`)及其每日活动增量更新(`ods_user_inc`)的日志表格,现在希望通过一次性的查询获得每位用户的最新状态概览(无论该用户当天是否有新的变动),此时就可以利用`FULL JOIN`完成此需求。
```sql
CREATE TABLE IF NOT EXISTS ods_user_info (
uid BIGINT,
uname STRING,
deptno BIGINT,
gender STRING
);
CREATE TABLE IF NOT EXISTS ods_user_inc(
uid BIGINT,
uname STRING,
deptno BIGINT,
gender STRING,
optime DATETIME
);
-- 查询每个用户的当前情况,包括那些今天没有任何改变的人
SELECT i.uid AS info_uid, inc.uid AS inc_uid, i.uname, i.deptno, i.gender, inc.optime
FROM ods_user_info i
FULL OUTER JOIN ods_user_inc inc ON i.uid = inc.uid;
```
这段脚本首先定义了两个模拟使用的表结构,接着通过一条简单的`FULL OUTER JOIN`命令实现了预期的功能——既包含了已有账户列表也涵盖了当日新增或修改过的实例[^5]。
阅读全文
相关推荐














