返回顶部
首页 > 资讯 > 数据库 >如何快速掌握Fink SQL
  • 258
分享到

如何快速掌握Fink SQL

2024-04-02 19:04:59 258人浏览 安东尼
摘要

这篇文章主要讲解了“如何快速掌握Fink sql”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“如何快速掌握Fink SQL”吧!1、导入所需要的的依赖包&l

这篇文章主要讲解了“如何快速掌握Fink sql”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“如何快速掌握Fink SQL”吧!

1、导入所需要的的依赖包

<dependency>           <groupId>org.apache.flink</groupId>           <artifactId>flink-table-planner_2.12</artifactId>           <version>1.10.1</version>       </dependency>       <dependency>           <groupId>org.apache.flink</groupId>           <artifactId>flink-table-api-Scala-bridge_2.12</artifactId>           <version>1.10.1</version>       </dependency>       <dependency>           <groupId>org.apache.flink</groupId>           <artifactId>flink-csv</artifactId>           <version>1.10.1</version>      </dependency>

flink-table-planner:planner 计划器,是 table API 最主要的部分,提供了运行时环境和生成程序执行计划的  planner; flink-table-api-scala-bridge:bridge 桥接器,主要负责 table API 和  DataStream/DataSet API的连接支持,按照语言分 java 和 scala。

这里的两个依赖,是 IDE 环境下运行需要添加的;如果是生产环境,lib 目录下默认已经有了 planner,就只需要有 bridge 就可以了。

当然,如果想使用用户自定义函数,或是跟 kafka 做连接,需要有一个 SQL client,这个包含在 flink-table-common  里。

2、两种 planner(old& blink)的区别

  1. 鸿蒙官方战略合作共建——HarmonyOS技术社区

  2. 批流统一:Blink 将批处理作业,视为流式处理的特殊情况。所以,blink 不支持表和DataSet 之间的转换,批处理作业将不转换为 DataSet  应用程序,而是跟流处理一样,转换为 DataStream 程序来处理。

  3. 因 为 批 流 统 一 , Blink planner 也 不 支 持 BatchTableSource , 而 使 用 有 界 的

  4. Blink planner 只支持全新的目录,不支持已弃用的 ExternalCatalog。

  5. 旧 planner 和 Blink planner 的 FilterableTableSource 实现不兼容。旧的 planner  会把PlannerExpressions 下推到 filterableTableSource 中,而 blink planner 则会把 Expressions  下推。

  6. 基于字符串的键值配置选项仅适用于 Blink planner。

  7. PlannerConfig 在两个 planner 中的实现不同。

  8. Blink planner 会将多个 sink 优化在一个 DAG 中(仅在 TableEnvironment 上受支持,而在  StreamTableEnvironment 上不受支持)。而旧 planner 的优化总是将每一个 sink 放在一个新的 DAG 中,其中所有 DAG  彼此独立。

  9. 旧的 planner 不支持目录统计,而 Blink planner 支持。

3、表(Table)的概念

TableEnvironment 可以注册目录 Catalog,并可以基于 Catalog 注册表。它会维护一个Catalog-Table 表之间的  map。 表(Table)是由一个标识符来指定的,由 3 部分组成:Catalog  名、数据库(database)名和对象名(表名)。如果没有指定目录或数据库,就使用当前的默认值。

4、连接到文件系统(Csv 格式)

连接外部系统在 Catalog 中注册表,直接调用 tableEnv.connect()就可以,里面参数要传入一个  ConnectorDescriptor,也就是 connector 描述器。对于文件系统的 connector 而言,flink内部已经提供了,就叫做  FileSystem()。

5、测试案例 (新)

需求: 将一个txt文本文件作为输入流读取数据过滤id不等于sensor_1的数据实现思路:  首先我们先构建一个table的env环境通过connect提供的方法来读取数据然后设置表结构将数据注册为一张表就可进行我们的数据过滤了(使用sql或者流处理方式进行解析)

准备数据

sensor_1,1547718199,35.8 sensor_6,1547718201,15.4 sensor_7,1547718202,6.7 sensor_10,1547718205,38.1 sensor_1,1547718206,32 sensor_1,1547718208,36.2 sensor_1,1547718210,29.7 sensor_1,1547718213,30.9

代码实现

import org.apache.flink.streaming.api.scala._ import org.apache.flink.table.api.{DataTypes} import org.apache.flink.table.api.scala._ import org.apache.flink.table.descriptors.{Csv, FileSystem, Schema}    object FlinkSqlTable {   def main(args: Array[String]): Unit = {     // 构建运行流处理的运行环境     val env = StreamExecutionEnvironment.getExecutionEnvironment     // 构建table环境     val tableEnv = StreamTableEnvironment.create(env)      //通过 connect 读取数据     tableEnv.connect(new FileSystem().path("D:\\d12\\Flink\\FlinkSql\\src\\main\\resources\\sensor.txt"))       .withFORMat(new Csv()) //设置类型       .withSchema(new Schema() // 给数据添加元数信息         .field("id", DataTypes.STRING())         .field("time", DataTypes.BIGINT())         .field("temperature", DataTypes.DOUBLE())       ).createTemporaryTable("inputTable")  // 创建一个临时表          val resTable = tableEnv.from("inputTable")       .select("*").filter('id === "sensor_1")     // 使用sql的方式查询数据     var resSql = tableEnv.sqlQuery("select * from inputTable where id='sensor_1'")     // 将数据转为流进行输出     resTable.toAppendStream[(String, Long, Double)].print("resTable")     resSql.toAppendStream[(String, Long, Double)].print("resSql")      env.execute("FlinkSqlWrodCount")   } }

6、TableEnvironment 的作用

  • 注册 catalog

  • 在内部 catalog 中注册表

  • 执行 SQL 查询

  • 注册用户自定义函数

  • 注册用户自定义函数

  • 保存对 ExecutionEnvironment 或 StreamExecutionEnvironment 的引用

在创建 TableEnv 的时候,可以多传入一个 EnvironmentSettings 或者 TableConfig 参数,可以用来配置  TableEnvironment 的一些特性。

7、 老版本创建流处理批处理

7.1老版本流处理

val settings = EnvironmentSettings.newInstance() .useOldPlanner() // 使用老版本 planner .inStreamingMode() // 流处理模式 .build() val tableEnv = StreamTableEnvironment.create(env, settings)

7.2 老版本批处理

val batchEnv = ExecutionEnvironment.getExecutionEnvironment  val batchTableEnv = BatchTableEnvironment.create(batchEnv)

7.3 blink 版本的流处理环境

val bsSettings = EnvironmentSettings.newInstance() .useBlinkPlanner() .inStreamingMode().build() val bsTableEnv = StreamTableEnvironment.create(env, bsSettings)

7.4 blink 版本的批处理环境

val bbSettings = EnvironmentSettings.newInstance() .useBlinkPlanner() .inBatchMode().build() val bbTableEnv = TableEnvironment.create(bbSettings)

感谢各位的阅读,以上就是“如何快速掌握Fink SQL”的内容了,经过本文的学习后,相信大家对如何快速掌握Fink SQL这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是编程网,小编将为大家推送更多相关知识点的文章,欢迎关注!

您可能感兴趣的文档:

--结束END--

本文标题: 如何快速掌握Fink SQL

本文链接: https://lsjlt.com/news/61930.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 如何快速掌握Fink SQL
    这篇文章主要讲解了“如何快速掌握Fink SQL”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“如何快速掌握Fink SQL”吧!1、导入所需要的的依赖包&l...
    99+
    2024-04-02
  • 如何快速掌握Github Actions
    这篇文章主要介绍“如何快速掌握Github Actions”,在日常操作中,相信很多人在如何快速掌握Github Actions问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”...
    99+
    2024-04-02
  • 如何快速掌握Python协程
    这篇文章主要讲解了“如何快速掌握Python协程”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“如何快速掌握Python协程”吧! 1. 协程相关的概念1.1 进程和线程进程(Pro...
    99+
    2023-06-15
  • 如何快速掌握Adam优化算法
    这篇文章主要讲解了“如何快速掌握Adam优化算法”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“如何快速掌握Adam优化算法”吧!本教程分为三个部分:他们是: 梯度下降 A...
    99+
    2023-06-15
  • 如何快速掌握前端开发技巧
    这篇文章将为大家详细讲解有关如何快速掌握前端开发技巧,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。如何高效学习H5前端开发?首先要学的是学HTML、CSS,这两个东西是一...
    99+
    2024-04-02
  • 如何快速掌握Maven的核心概念
    本篇内容主要讲解“如何快速掌握Maven的核心概念”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“如何快速掌握Maven的核心概念”吧!坐标坐标的概念能够确定一个...
    99+
    2024-04-02
  • 如何快速掌握Python的基础知识
    本篇内容主要讲解“如何快速掌握Python的基础知识”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“如何快速掌握Python的基础知识”吧!python函数函数通过def关键字定义,形如pytho...
    99+
    2023-06-27
  • 如何快速掌握 Go 语言关键字?
    Go 语言是一种高效、快速、简单的编程语言,它的出现极大地改善了现代编程的生态环境。Go 语言的开发团队为了提高编程效率和代码可读性,设计了一系列的关键字。掌握这些关键字是学习 Go 语言的必要步骤。本篇文章将为大家介绍如何快速掌握 Go...
    99+
    2023-07-28
    关键字 教程 linux
  • Tree-Shaking 机制快速掌握
    目录写在前面直奔主题最后写在前面 最近在读霍老师的《Vue.js设计与实现》,感觉收获很多,由于霍老师是官方Vue维护成员,会从很通俗易懂的角度去讲Vue的实现细节。而不是按照源码...
    99+
    2023-02-16
    Tree-Shaking 机制 Tree Shaking
  • 【快速掌握RabbitMQ到实战】
    1.什么是消息队列 ● 消息队列(Message Queue)是一种用于在应用程序之间传递消息的通信方式,消息队列允许应用程序异步地发送和接收消息,并且不需要直接连接到对方。 ● 消息(Message)是指在应用间传送的数据。消息可以非常简...
    99+
    2023-08-23
    java-rabbitmq rabbitmq java 分布式 中间件
  • 如何快速掌握Docker必备基础知识
    本篇内容介绍了“如何快速掌握Docker必备基础知识”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!没有虚拟化技术的原始年代我们仔细想想,在没...
    99+
    2023-06-16
  • 如何快速掌握Python中的循环技术
    这篇文章主要讲解了“如何快速掌握Python中的循环技术”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“如何快速掌握Python中的循环技术”吧!1. 使用enumerate()循环整个序列当...
    99+
    2023-06-15
  • Python如何快速上手? 快速掌握一门新语言的方法
    那么Python如何快速上手?找来了一篇广受好评的新语言学习方法介绍,供大家参考。 听说,你决定要为你的 “技能树” 再添加一门特定的编程语言。那该怎么办呢? 在这篇文章中,作者提出了 12 项关于学习技术...
    99+
    2022-06-04
    快速 一门 上手
  • 快速掌握PyCharm的运行快捷键
    PyCharm是一款功能强大的Python集成开发环境,通过灵活的快捷键可以提高开发效率。本文将向您介绍PyCharm中常用的运行快捷键,并提供具体的代码示例,帮助您快速入门PyCha...
    99+
    2024-02-26
    运行 pycharm 快捷键 python程序
  • Java快速掌握Vector类方法
    目录Vector的基本介绍Vector类支持4种构造方法一些常用的方法1.add方法2.remove方法3.set方法4.size、capacity、get方法代码Vector的基本...
    99+
    2024-04-02
  • 快速掌握VueRouter使用方法
    目录一、编程式路由导航二、缓存路由组件三、两个新的声明周期钩子四、路由守卫五、路由器的两种工作模式本篇博客会介绍Vue中的VueRouter的基本使用,编程式路由导航增加了我们进行路...
    99+
    2023-01-09
    Vue Router用法 Vue Router原理
  • 一文快速掌握Spring Cloud Stream
    目录一、概述简介1.1. cloud Stream是什么1.2. 设计思想1.4. 注解二、基于注解代码练习2.1. 消息驱动之生产者2.3. 目前存在的问题2.4. 分组解决重复消...
    99+
    2024-04-02
  • Apache 与 ASP:如何在 Windows 系统上快速掌握?
    Apache 和 ASP 是两种非常流行的 Web 服务器和 Web 应用程序框架。Apache 是一个开源的 Web 服务器软件,而 ASP 是一种用于创建动态 Web 应用程序的 Microsoft 技术。本文将介绍如何在 Windo...
    99+
    2023-06-20
    apache 学习笔记 windows
  • 如何快速掌握ASP API?一份详细教程!
    ASP API是一种广泛使用的技术,它可以帮助开发人员实现各种功能,包括处理HTTP请求、数据库操作、文件处理等。如果你想要快速掌握ASP API,本文将为你提供一份详细的教程。 安装ASP.NET Core ASP.NET Core是...
    99+
    2023-11-06
    api 教程 学习笔记
  • 零基础学习如何快速掌握CSS框架:快速入门指南
    CSS框架快速入门指南:从零开始学习如何快速做好CSS框架,需要具体代码示例 引言:在当今的Web开发中,CSS框架被广泛应用于构建漂亮、响应式的网页设计。CSS框架可以帮助开发者快速搭建美观、一致的网页布局,减少开发时间。本文...
    99+
    2024-01-16
    学习 快速入门 CSS框架
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作