Apache Flink 漫谈系列 - SQL概览
UNION ALL 将两个表合并起来,要求两个表的字段完全一致,包括字段类型、字段顺序,语义对应关系代数的Union,只是关系代数是Set集合操作,会有去重复操作,UNION ALL 不进行去重,如下所示: 1. SQL 示例 我们简单的将customer_tab查询2次,将查询结果合并起来,如下:
2. Result 3. 特别说明 UNION ALL 对结果数据不进行去重,如果想对结果数据进行去重,传统数据库需要进行UNION操作。 九、UNION UNION 将两个流给合并起来,要求两个流的字段完全一致,包括字段类型、字段顺序,并其UNION 不同于UNION ALL,UNION会对结果数据去重,与关系代数的Union语义一致,如下: 1. SQL 示例 我们简单的将customer_tab查询2次,将查询结果合并起来,如下:
我们发现完全一样的表数据进行 UNION之后,数据是被去重的,UNION之后的数据并没有增加。 2. Result 3. 特别说明 UNION 对结果数据进行去重,在实际的实现过程需要对数据进行排序操作,所以非必要去重情况请使用UNION ALL操作。 十、JOIN JOIN 用于把来自两个表的行联合起来形成一个宽表,Apache Flink支持的JOIN类型:
JOIN与关系代数的Join语义相同,具体如下: 1. SQL 示例 (JOIN) INNER JOIN只选择满足ON条件的记录,我们查询customer_tab 和 order_tab表,将有订单的客户和订单信息选择出来,如下:
2. Result 3. SQL 示例 (LEFT JOIN) LEFT JOIN与INNER JOIN的区别是当右表没有与左边相JOIN的数据时候,右边对应的字段补NULL输出,语义如下: 对应的SQL语句如下(LEFT JOIN):
细心的读者可能发现上面T2.ColC是添加了前缀T2了,这里需要说明一下,当两张表有字段名字一样的时候,我需要指定是从那个表里面投影的。 (编辑:晋中站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |