上级:https://www.cnblogs.com/hackerxiaoyon/p/12747387.html

Table API

Table api 有批量的api和流实时的api。通常很容易进行数据分析、批量数据导入 和 做一些数据清洗的工作。

What Will You Be Building? 案例说明

此案例需要构建一个数据清洗的通道用来随时间跟踪金融交易,构建一个夜间的批量作业然后集成到流通道中。

Prerequisites 前提

需要你具备java 或 scala的知识,当然你有其他语言也是可以的,同时这方面也是需要具备一定的sql 的知识。

Help,I’m Stuck! 寻求帮助

如果你卡住了,可以 求助 https://flink.apache.org/gettinghelp.html 。

https://flink.apache.org/community.html#mailing-lists 用户邮件列表是一个活跃快速提供帮助的地方。

How To Follow Along 如何跟进

环境

l Java 8 or 11

l Maven

构建java 程序demo

$ mvn archetype:generate \

-DarchetypeGroupId=org.apache.flink \

-DarchetypeArtifactId=flink-walkthrough-table-java \

-DarchetypeVersion=1.10.0 \

-DgroupId=spend-report \

-DartifactId=spend-report \

-Dversion=0.1 \

-Dpackage=spendreport \

-DinteractiveMode=false

ExecutionEnvironment env   = ExecutionEnvironment.getExecutionEnvironment();

BatchTableEnvironment tEnv = BatchTableEnvironment.create(env);

tEnv.registerTableSource("transactions", new BoundedTransactionTableSource());

tEnv.registerTableSink("spend_report", new SpendReportTableSink());

tEnv.registerFunction("truncateDateToHour", new TruncateDateToHour());

tEnv.scan("transactions").insertInto("spend_report");

env.execute("Spend Report");

Breaking Down The Code分解一下代码

执行环境

java语言

这是个批量的环境,也就是你在接source的时候,可以是流还是批量。这是批量的Table api方式。

ExecutionEnvironment env   = ExecutionEnvironment.getExecutionEnvironment();

BatchTableEnvironment tEnv = BatchTableEnvironment.create(env);

Registering Tables

然后我们可以注册一个表方式在执行环境中,同时可以接内部系统读写批流数据。一个表数据源提供把数据写到内部系统中,像:数据库,key-value的存储redis,消息队列,或者是文件系统。基本就是接数据源source,中间业务处理,最后sink落地。

tEnv.registerTableSource("transactions", new BoundedTransactionTableSource());

tEnv.registerTableSink("spend_report", new SpendReportTableSink());

这里我们注册了两个表,一个输入table,一个输出table。 transactions表让我们读取信用卡交易信息,包含账号,交易时间,交易额度。

Registering A UDF

注册一个udf,也就是用户自定义函数。具体TruncateDateToHour代码需要你在构建代码后在你的IDE中查看。

tEnv.registerFunction("truncateDateToHour", new TruncateDateToHour());

The Query

tEnv

.scan("transactions")

.insertInto("spend_report");

查看然后插入没有做其他的操作。

Execute

执行代码

env.execute("Spend Report");

Attempt One 尝试一下

tEnv
        .scan("transactions")
        .select("accountId, timestamp.truncateDateToHour as timestamp, amount")
        .groupBy("accountId, timestamp")
        .select("accountId, timestamp, amount.sum as total")
        .insertInto("spend_report");

你尝试跑这个代码的时候肯定会报错

Caused by: java.lang.ClassNotFoundException: org.apache.flink.table.api.java.internal.BatchTableEnvironmentImpl

因为没有依赖有冲突,所以查看你的冲突直接把对应的排除就好。直接运行你的代码。

<dependency>
   <groupId>org.apache.flink</groupId>
   <artifactId>flink-table-planner_${scala.binary.version}</artifactId>
   <version>${flink.version}</version>
   <scope>provided</scope>
   <exclusions>
      <exclusion>
         <groupId>org.apache.flink</groupId>
         <artifactId>org.apache.flink:flink-table-api-java-*</artifactId>
      </exclusion>
   </exclusions>
</dependency>

代码结果太长了,我截图简单的看一下。

查询表,表中有三个字段,然后我们根据账号,时间分组,计算每个时间段对应的总钱数。然后sink的时候打印出来。

Adding Windows 添加窗口

窗口在我们flink经常使用的一种策略,keyed 窗口,no-keyed窗口。然后有三种指定的窗口类型,之前我记得是三种,分别是:滚动窗口,滑动窗口,会话窗口,全局窗口。等到了窗口的地方我们再细说。执行下面的代码,意思是统计按照时间字段一小时一个窗口进行统计的数据。

tEnv

.scan("transactions")

.window(Tumble.over("1.hour").on("timestamp").as("w"))

.groupBy("accountId, w")

.select("accountId, w.start as timestamp, amount.sum")

.insertInto("spend_report");

Once More, With Streaming! 再来个流计算

因为table api提供了两种一种batch一种是streaming。我们将环境换成如下就可以了,其他代码不变,直接运行。

StreamTableEnvironment tEnv = StreamTableEnvironment.create(env);

Code Walkthroughs Table API的更多相关文章

  1. Code Walkthroughs DataStream API

    上级:https://www.cnblogs.com/hackerxiaoyon/p/12747387.html DataStream API DataStreamApi 提供了健壮,有状态的流应用, ...

  2. 使用flink Table &Sql api来构建批量和流式应用(2)Table API概述

    从flink的官方文档,我们知道flink的编程模型分为四层,sql层是最高层的api,Table api是中间层,DataStream/DataSet Api 是核心,stateful Stream ...

  3. Flink实战(六) - Table API & SQL编程

    1 意义 1.1 分层的 APIs & 抽象层次 Flink提供三层API. 每个API在简洁性和表达性之间提供不同的权衡,并针对不同的用例. 而且Flink提供不同级别的抽象来开发流/批处理 ...

  4. 【翻译】Flink Table Api & SQL — 流概念

    本文翻译自官网:Streaming Concepts  https://ci.apache.org/projects/flink/flink-docs-release-1.9/dev/table/st ...

  5. Flink Table Api & SQL 翻译目录

    Flink 官网 Table Api & SQL  相关文档的翻译终于完成,这里整理一个安装官网目录顺序一样的目录 [翻译]Flink Table Api & SQL —— Overv ...

  6. 【翻译】Flink Table Api & SQL — 性能调优 — 流式聚合

    本文翻译自官网:Streaming Aggregation  https://ci.apache.org/projects/flink/flink-docs-release-1.9/dev/table ...

  7. 【翻译】Flink Table Api & SQL — 配置

    本文翻译自官网:Configuration https://ci.apache.org/projects/flink/flink-docs-release-1.9/dev/table/config.h ...

  8. 【翻译】Flink Table Api & SQL — Hive —— 在 scala shell 中使用 Hive 连接器

    本文翻译自官网:Use Hive connector in scala shell  https://ci.apache.org/projects/flink/flink-docs-release-1 ...

  9. 【翻译】Flink Table Api & SQL — Hive —— Hive 函数

    本文翻译自官网:Hive Functions  https://ci.apache.org/projects/flink/flink-docs-release-1.9/dev/table/hive/h ...

随机推荐

  1. java方式实现基数排序

    一.基数排序描述 基数排序(radix sort)属于"分配式排序"(distribution sort),又称"桶子法"(bucket sort)或bin s ...

  2. win10系统下计算器界面变成英文的解决方法

    标题: win10系统下计算器界面变成英文的解决方法 作者: 梦幻之心星 347369787@QQ.com 标签: [win10, 计算器, 英文] 目录: 软件 日期: 2019-04-20 目录 ...

  3. 【Java8新特性】接口中的默认方法和静态方法,你都掌握了吗?

    写在前面 在Java8之前的版本中,接口中只能声明常量和抽象方法,接口的实现类中必须实现接口中所有的抽象方法.而在Java8中,接口中可以声明默认方法和静态方法,本文,我们就一起探讨下接口中的默认方法 ...

  4. Java实现 LeetCode 473 火柴拼正方形

    473. 火柴拼正方形 还记得童话<卖火柴的小女孩>吗?现在,你知道小女孩有多少根火柴,请找出一种能使用所有火柴拼成一个正方形的方法.不能折断火柴,可以把火柴连接起来,并且每根火柴都要用到 ...

  5. java实现拼出漂亮的表格

    /* * 在中文 Windows 环境下,控制台窗口中也可以用特殊符号拼出漂亮的表格来. 比如: ┌─┬─┐ │ │ │ ├─┼─┤ │ │ │ └─┴─┘ 其实,它是由如下的符号拼接的: 左上 = ...

  6. java实现第四届蓝桥杯空白格式化

    空白格式化 本次大赛采用了全自动机器测评系统. 如果你的答案与标准答案相差了一个空格,很可能无法得分,所以要加倍谨慎! 但也不必过于惊慌.因为在有些情况下,测评系统会把你的答案进行"空白格式 ...

  7. Java实现第九届蓝桥杯螺旋折线

    螺旋折线 题目描述 如图p1.pgn所示的螺旋折线经过平面上所有整点恰好一次. 对于整点(X, Y),我们定义它到原点的距离dis(X, Y)是从原点到(X, Y)的螺旋折线段的长度. 例如dis(0 ...

  8. 关于virgo-tomcat-server-3.6.0.RELEASE服务的启动

    1.先查看程序是否启动,如果已经启动可以执行第3步的操作进行关闭. [user01@ ~]$ # ps -ef|grep java //查看virgo-tomcat-server的java进程是否存在 ...

  9. k8s学习-资源控制器

    4.3.资源控制器 4.3.1.概念 Kubernetes中内建了很多种controller(控制器),这些相当于一个状态机,用来控制Pod的具体状态和行为. 4.3.2.分类 Replication ...

  10. 【网页设计】第四周 JavaSript

    第四周  JSP 一  JSP概述 含义: Java Server Pages, 广泛使用的服务器端脚本语言之一:(运行在服务器端  BS结构) 由服务器端的JSP引擎执行JSP代码,然后将结果以HT ...