1. 概述
进行数据处理时,经常需要将数据表进行连接,本文介绍在 FineDataLink 中的多种连接方式。
2. 左连接
LEFT JOIN(左连接)和 LEFT OUTER JOIN(左外连接) :返回包括左表中的所有记录和右表中连接字段相等的记录。
根据条件以左表为基准进行匹 配,如果匹配则正常输出,没有则以 null 代替,而且右边表有重复值的情况下会输出多条。
在 FineDataLink 中可以使用「数据关联」实现。
有两张表如下:
使用数据关联左连接,如下图所示:
得到以下结果:
上述算子设置相当于 SparkSQL 中的语法:
select * from DB表输入-副本
left join DB表输入1-副本
on DB表输入-副本.`姓名` = DB表输入1-副本.`姓名`
或者
select * from DB表输入-副本
left outer join DB表输入1-副本
on DB表输入-副本.`姓名` = DB表输入1-副本.`姓名`
注:LEFT JOIN 和 LEFT OUTER JOIN 的输出结果是一样的。
LEFT SEMI JOIN(左半连接):
只显示左边的表中的列,如果条件在左右边表中匹配,则输出,否则 过滤掉,而且右边表有重复值的情况下也只输出一条。
例如上述两张数据表,如果使用左半连接则
注:语句不能直接复制,数据表需点击输入源生成。
则只会显示左右边表都匹配的结果,且右侧重复值被删除,结果如下:
3. 右连接
与左连接一致,使用「数据关联」即可实现。
4. 全连接
与左连接一致,使用「数据关联」即可实现。
5. 内连接
与左连接一致,使用「数据关联」即可实现。
5. UNION 和 UNION ALL 联合
UNION:会在上下联合时去除完全重复的数据。如果不为了去除重复行,建议使用 UNION ALL,并且效率会更高。
示例: select* from ( select 2 as id_no,99 as score union select 2 ,95 ) Student_Score
UNION ALL :对查询的数据集取并集,不会去除重复行。
例如使用如下数据表进行上下联合:
1)使用两个DB表输入算子,使用 SQL 与筛选出表a1,a2的全部数据,然后 Spark SQL 算子的 SQL 语句为:
select * from a1
union all
select * from a2
效果如下图所示:
注:语句不能直接复制,数据表需点击输入源生成。
结果如下图所示:
如果使用 UNION 则表一种的重复数据会被删除,仅保留一条,结果如下图所示: