加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 教程 > 正文

Apache Flink 漫谈系列(13) - Table API 概述

发布时间:2019-01-18 02:39:04 所属栏目:教程 来源:孙金城
导读:一、什么是Table API 在《Apache Flink 漫谈系列(08) - SQL概览》中我们提纲的向各人先容了什么是好SQL,SQL和Table API是Apache Flink中的统一条理的API抽象,如下图所示: Apache Flink 针对差异的用户场景提供了三层用户API,最基层ProcessFunction API

各人看到在 SELECT 不只可以行使平凡的字段选择,还可以行使ScalarFunction,虽然也包罗User-Defined Function,同时还可以举办字段的alias配置。着实SELECT可以团结聚合,在GROUPBY部门会举办先容,一个较量非凡的行使场景是去重的场景,示譬喻下:

  • Table API示例

在订单表查询全部的客户id,消除一再客户id, 如下:

  1. val result = order 
  2. .groupBy('c_id) 
  3. .select('c_id) 
  • Result
  • Apache Flink 漫谈系列(13) - Table API 概述

3. WHERE

WHERE 用于从数据集/流中过滤数据,与SELECT一路行使,语义是相关代数的Selection,按照某些前提对相关做程度支解,即选择切合前提的记录,如下所示:

Apache Flink 漫谈系列(13) - Table API 概述

(1) Table API 示例

在customer_tab查询客户id为c_001和c_003的客户信息,如下:

  1. val result = customer 
  2. .where("c_|| c_") 
  3. .select( 'c_id, 'c_name, 'c_desc) 

(2) Result

Apache Flink 漫谈系列(13) - Table API 概述

(3) 出格声名

我们发明WHERE是对满意必然前提的数据举办过滤,WHERE支持=, <, >, <>, >=, <=以及&&, ||等表达式的组合,最终满意过滤前提的数据会被选择出来。 SQL中的IN和NOT IN在Table API内里用intersect 和 minus描写(flink-1.7.0版本)。

  • Intersect 示例

Intersect只在Batch模式下举办支持,Stream模式下我们可以操作双流JOIN来实现,如:在customer_tab查询已经下过订单的客户信息,如下:

  1. // 计较客户id,并去重 
  2. val distinct_cids = order 
  3. .groupBy('c_id) // 去重 
  4. .select('c_id as 'o_c_id) 
  5.  
  6. val result = customer 
  7. .join(distinct_cids, 'c_id === 'o_c_id) 
  8. .select('c_id, 'c_name, 'c_desc) 
  • Result

Apache Flink 漫谈系列(13) - Table API 概述

  • Minus 示例

Minus只在Batch模式下举办支持,Stream模式下我们可以操作双流JOIN来实现,如:在customer_tab查询没有下过订单的客户信息,如下:

  1. // 查询下过订单的客户id,并去重 
  2. val distinct_cids = order 
  3. .groupBy('c_id) 
  4. .select('c_id as 'o_c_id) 
  5. // 查询没有下过订单的客户信息 
  6. val result = customer 
  7. .leftOuterJoin(distinct_cids, 'c_id === 'o_c_id) 
  8. .where('o_c_id isNull) 
  9. .select('c_id, 'c_name, 'c_desc) 

(编辑:湖南网)

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

热点阅读