加入收藏 | 设为首页 | 会员中心 | 我要投稿 惠州站长网 (https://www.0752zz.com.cn/)- 办公协同、云通信、物联设备、操作系统、高性能计算!
当前位置: 首页 > 教程 > 正文

Apache Flink 漫谈系列(10) - JOIN LATERAL

发布时间:2018-12-20 03:29:47 所属栏目:教程 来源:孙金城
导读:副标题#e# 一、聊什么 上一篇《Apache Flink 漫谈系列 - JOIN算子》我们对最常见的JOIN做了详尽的分析,本篇介绍一个特殊的JOIN,那就是JOIN LATERAL。JOIN LATERAL为什么特殊呢,直观说因为JOIN的右边不是一个实际的物理表,而是一个VIEW或者Table-valued

查询结果:

Apache Flink 漫谈系列(10) - JOIN LATERAL

我们发现虽然C001的Customer有三笔订单,但是我们查询的TOP1信息。

  • JOIN 写法
  1. SELECT c.customerid, c.city, o.orderid 
  2. FROM Customers c 
  3. JOIN ( 
  4. SELECT 
  5. o2.*, 
  6.      ROW_NUMBER() OVER ( 
  7.         PARTITION BY customerid 
  8.         ORDER BY orderid 
  9.      ) AS rn 
  10. FROM Orders o2 
  11. ) o 
  12. ON c.customerid = o.customerid AND o.rn = 1 

查询结果:

Apache Flink 漫谈系列(10) - JOIN LATERAL

如上我们都完成了查询需求,我们在来看一下执行Plan,如下:

Apache Flink 漫谈系列(10) - JOIN LATERAL

我们直观发现完成相同功能,使用CROSS APPLY进行查询,执行Plan简单许多。

2. 功能方面

在功能方面INNER JOIN本身在ANSI-SQL中是不允许 JOIN 一个Function的,这也是SQL Server当时引入CROSS APPLY的根本原因。我们以一个SQL Server中DMV(相当于TVF)查询为例:

  1. SELECT 
  2. name, log_backup_time 
  3. FROM sys.databases AS s 
  4. CROSS APPLY sys.dm_db_log_stats(s.database_id); 

查询结果:

Apache Flink 漫谈系列(10) - JOIN LATERAL

五、Apache Flink对 LATERAL的支持

前面我花费了大量的章节来向大家介绍ANSI-SQL和传统数据库以SQL Server为例如何支持LATERAL的,接下来我们看看Apache Flink对LATERAL的支持情况。

1. Calcite

(编辑:惠州站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

推荐文章
    热点阅读