当前位置: 首页 > news >正文

【大数据】Flink 详解(九):SQL 篇 Ⅱ

Flink 详解》系列(已完结),共包含以下 10 10 10 篇文章:

  • 【大数据】Flink 详解(一):基础篇
  • 【大数据】Flink 详解(二):核心篇 Ⅰ
  • 【大数据】Flink 详解(三):核心篇 Ⅱ
  • 【大数据】Flink 详解(四):核心篇 Ⅲ
  • 【大数据】Flink 详解(五):核心篇 Ⅳ
  • 【大数据】Flink 详解(六):源码篇 Ⅰ
  • 【大数据】Flink 详解(七):源码篇 Ⅱ
  • 【大数据】Flink 详解(八):SQL 篇 Ⅰ
  • 【大数据】Flink 详解(九):SQL 篇 Ⅱ
  • 【大数据】Flink 详解(十):SQL 篇 Ⅲ

😊 如果您觉得这篇文章有用 ✔️ 的话,请给博主一个一键三连 🚀🚀🚀 吧 (点赞 🧡、关注 💛、收藏 💚)!!!您的支持 💖💖💖 将激励 🔥 博主输出更多优质内容!!!

Flink 详解(九):SQL 篇 Ⅱ

  • 96.源码中分区提交的 PartitionCommitTrigger 介绍一下?
  • 97.PartitionTimeCommitTigger 是如何知道该提交哪些分区的呢?(源码分析)
  • 98.如何保证已经写入分区的数据对下游可见的标志问题(源码分析)
  • 99.Flink SQL CEP 有没有接触过?
  • 100.Flink SQL CEP 了解的参数介绍一下?
    • 1️⃣ after match skip past last row
    • 2️⃣ after match skip to next row
    • 3️⃣ after match skip to last patternItem
    • 4️⃣ after match skip to first patternItem
  • 101.编写一个 CEP SQL 案例,如银行卡盗刷

96.源码中分区提交的 PartitionCommitTrigger 介绍一下?

在源码中,PartitionCommitTrigger 类图如下所示:

在这里插入图片描述
该类中维护了两对必要的信息:

  • pendingPartitions / pendingPartitionsState等待提交的分区 以及 对应的状态
  • watermarks / watermarksStatewatermarks(用 TreeMap 存储以保证有序)以及 对应的状态

97.PartitionTimeCommitTigger 是如何知道该提交哪些分区的呢?(源码分析)

1️⃣ 检查 checkpoint ID 是否合法。

2️⃣ 取出当前 checkpoint ID 对应的水印,并调用 TreeMap 的 headMap()clear() 方法删掉早于当前 checkpoint ID 的水印数据(没用了)。

3️⃣ 遍历等待提交的分区,调用之前定义的 PartitionTimeExtractor。比如:${year}-${month}-${day} ${hour}:00:00,抽取分区时间。如果 watermark > partition-time + delay,说明可以提交,并返回它们。

98.如何保证已经写入分区的数据对下游可见的标志问题(源码分析)

在源码中,主要涉及 PartitionCommitPolicy 类,如下图所示:

在这里插入图片描述
在这里插入图片描述

99.Flink SQL CEP 有没有接触过?

CEPComplex Event Processing):复杂事件处理,用于识别输入流中符合指定规则的事件,并按照指定方式输出。

  • 起床 ➡ 洗漱 ➡ 吃饭 ➡ 上班,一系列串联起来的事件流形成的模式。
  • 浏览商品 ➡ 加入购物车 ➡ 创建订单 ➡ 支付完成 ➡ 发货 ➡ 收货,事件流形成的模式。

通过概念可以了解,CEP 主要是 识别输入流中用户指定的一些基本规则的事件,然后将这些事件再通过指定方式输出。

如下图所示: 我们指定 “方块、圆” 为基本规则的事件,在输入的原始流中,将这些事件作为一个结果流输出来。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 用户异常检测:我们指定异常操作事件为要输出的结果流。
  • 策略营销:指定符合要求的事件为结果流。
  • 运维监控:指定一定范围的指标为结果流。
  • 银行卡盗刷:指定同一时刻在两个地方被刷两次为异常结果流。

Flink CEP SQL 语法是通过 SQL 方式进行复杂事件处理,但是与 Flink SQL 语法也不太相同,其中包含许多规则。

100.Flink SQL CEP 了解的参数介绍一下?

CEP 包含的参数如下:

在这里插入图片描述

输出模式(每个找到的匹配项应该输出多少行)

  • one row per match:每次检测到完整的匹配后进行汇总输出。
  • all rows per match(Flink 暂不支持):检测到完整的匹配后会把匹配过程中每条具体记录进行输出。

running VS final 语义

  • 在计算中使用那些匹配的事件:running 匹配中,final 匹配结束。
  • define 语句中只可以使用 runningmeasure 语句中两者都可以。
  • 输出结果区别
    • 对于 one row per match,输出没区别。
    • 对于 all rows per match,输出不同。

在这里插入图片描述
在这里插入图片描述

匹配后跳转模式介绍

after match(匹配后,从哪里开始重新匹配)

  • skip to next row:从匹配成功的事件序列中的第一个事件的下一个事件开始进行下一次匹配。
  • skip past last row:从匹配成功的事件序列中的最后一个事件的下一个事件开始进行下一次匹配。
  • skip to first patternItem:从匹配成功的事件序列中第一个对应于 patternItem 的事件开始进行下一次匹配。
  • skip to last patternItem:从匹配成功的事件序列中最后一个对应于 patternItem 的事件开始进行下一次匹配。

注意:使用 skip to first / last patternItem 容易出现循环匹配问题,需要慎重。

针对上面的匹配后跳转模式分别介绍:

1️⃣ after match skip past last row

在这里插入图片描述

2️⃣ after match skip to next row

在这里插入图片描述

3️⃣ after match skip to last patternItem

在这里插入图片描述

4️⃣ after match skip to first patternItem

在这里插入图片描述

101.编写一个 CEP SQL 案例,如银行卡盗刷

通过 Flink CEP SQL 写的关于金融场景银行卡盗刷案例。

案例介绍:在金融场景中,有时会出现银行卡盗刷现象,犯罪分子利用互联网等技术,在间隔 10 分钟或者更短时间内,使一张银行卡在不同的两个地方出现多次刷卡记录,这从常规操作来说,在间隔时间很多的情况下,用户是无法同时在两个城市进行刷卡交易的,所以出现这种问题,就需要后台做出触发报警机制。

要求:当相同的 cardId 在十分钟内,从两个不同的 Location 发生刷卡现象,触发报警机制,以便检测信用卡盗刷现象。

在这里插入图片描述
(1)编写 CEP SQL 时,包含许多技巧,首先我们编写最基础的查询语句,从一张表中查询需要的字段。

select starttime,endtime,cardId,event from dataStream

(2)match_recognize();

  • 该字段是 CEP SQL 的前提条件,用于生成一个追加表,所有的 CEP SQL 都是书写在这里面。

(3)分区,排序

  • 由于是对同一 ID,所以需要使用 partition by,还要根据时间进行排序 order by

(4)理解 CEP SQL 核心的编写顺序,如上图标的顺序

  • 1️⃣ CEP SQL 的类为 Pattern,检测在 10 分钟内两个地方出现刷卡现象,所以定义两个事件。
Pattern (e1 e2+) within interval '10' minute
  • 2️⃣ 定义在 Pattern 中要求的判断语句,规定使用 define
definee1 as a1.action = ''e2 as e2.action = '' and e2.location <> e1.location
  • 3️⃣ 根据上述的输入条件构建输出条件,规定使用 measures
measurese2.action as evente1.timestamp as starttimelast(e2.timestamp) as endtime
  • 4️⃣ 输出条件匹配成功,输出一条,规定写法(这块根据不同的规则写不同的语句)。
one row per match
  • 5️⃣ 匹配后跳转跳转到下一行(根据不同规则写不同语句)。
after match skip to  next row

根据核心编写顺序进行理解,然后在按照书写正确的顺序进行编写。

相关文章:

【大数据】Flink 详解(九):SQL 篇 Ⅱ

《Flink 详解》系列&#xff08;已完结&#xff09;&#xff0c;共包含以下 10 10 10 篇文章&#xff1a; 【大数据】Flink 详解&#xff08;一&#xff09;&#xff1a;基础篇【大数据】Flink 详解&#xff08;二&#xff09;&#xff1a;核心篇 Ⅰ【大数据】Flink 详解&…...

workflow源码解析:GoTask

关于go task 提供了另一种更简单的使用计算任务的方法&#xff0c;模仿go语言实现的go task。 使用go task来实计算任务无需定义输入与输出&#xff0c;所有数据通过函数参数传递。 与ThreadTask 区别 ThreadTask 是有模板&#xff0c;IN 和 OUT&#xff0c; ThreadTask 依赖…...

SpringMVC入门案例

引言 Spring MVC是一个基于MVC架构的Web框架&#xff0c;它的主要作用是帮助开发者构建Web应用程序。它提供了一个强大的模型驱动的开发方式&#xff0c;可以帮助开发者实现Web应用程序的各种功能&#xff0c;如请求处理、数据绑定、视图渲染、异常处理等。 开发步骤 1.创建we…...

Docker本地私有仓库搭建配置指导

一、说明 因内网主机需要拉取镜像进行Docker应用&#xff0c;因此需要一台带外主机作为内网私有仓库来提供内外其他docker业务主机使用。参考架构如下&#xff1a; 相关资源&#xff1a;加密、Distribution registry、Create and Configure Docker Registry、Registry部署、D…...

python 通过定时任务执行pytest case

这段Python代码使用了schedule库来安排一个任务&#xff0c;在每天的22:50时运行。这个任务执行一个命令来运行pytest&#xff0c;并生成一个报告。 代码开始时将job_done变量设为False&#xff0c;然后运行预定的任务。一旦任务完成&#xff0c;将job_done设置为True并跳出循…...

算法面试题:合并两个有序链表

描述&#xff1a;给定两个按非递减顺序排列的链表&#xff0c;合并两个链表&#xff0c;并将结果按非递减顺序排列。 例如&#xff1a; # 链表 1: 1 -> 2 -> 4 # 链表 2: 1 -> 3 -> 4合并后的链表应该是&#xff1a;1 -> 1 -> 2 -> 3 -> 4 -> 4 …...

LaWGPT安装和使用教程的复现版本【细节满满】

文章目录 前言一、下载和部署1.1 下载1.2 环境安装1.3 模型推理 总结 前言 LaWGPT 是一系列基于中文法律知识的开源大语言模型。该系列模型在通用中文基座模型&#xff08;如 Chinese-LLaMA、ChatGLM等&#xff09;的基础上扩充法律领域专有词表、大规模中文法律语料预训练&am…...

西门子博途用SCL语言写的入栈出栈

1.用户登录 #pragma code ("useadmin.dll") #include "PWRT_api.h" #pragma code() PWRTLogin(1) 2.用户退出 #pragma code ("useadmin.dll") #include "PWRT_api.h" #pragma code() PWRTLogout(); 3.画面跳转 SetPictureName("P…...

密码产品推介 | 沃通安全电子签章系统(ES-1)

产品介绍 沃通安全电子签章系统&#xff08;ES-1&#xff09;是一款基于密码技术、完全自主研发的商用密码产品&#xff0c;严格遵循国家密码管理局制定的相关标准&#xff0c;可为企业和个人提供安全、合规的电子签章功能服务。产品的主要用途是为各类文书、合同、表单等电子…...

蓝桥杯真题(Python)每日练Day1

说明&#xff1a;在CSP认证的基础上&#xff08;可以看看本人CSP打卡系列的博客&#xff09;备赛2024蓝桥杯&#xff08;Python&#xff09;&#xff0c;本人专业&#xff1a;大数据与数据科学 因此对python要求熟练掌握&#xff0c;通过练习蓝桥杯既能熟悉语法又能锻炼算法和思…...

IDEA怎么用Devtools热部署

IDEA怎么用Devtools热部署 大家知道在项目开发过程中&#xff0c;有时候会改动代码逻辑或者修改数据结构&#xff0c;为了能使改动的代码生效&#xff0c;往往需要重启应用查看改变效果&#xff0c;这样会相当耗费时间。 重启应用其实就是重新编译生成新的Class文件&#xff0…...

boost.circular_buffer的使用和介绍

C 文章目录 C 很多时候&#xff0c;我们需要在内存中记录最近一段时间的数据&#xff0c;如操作记录等。由于这部分数据记录在内存中&#xff0c;因此并不能无限递增&#xff0c;一般有容量限制&#xff0c;超过后就将最开始的数据移除掉。在stl中并没有这样的数据结构&#xf…...

深入理解Java中的ThreadLocal

第1章&#xff1a;引言 大家好&#xff0c;我是小黑。今天咱们来聊聊ThreadLocal。首先&#xff0c;让咱们先搞清楚&#xff0c;ThreadLocal是个什么玩意儿。简单说&#xff0c;ThreadLocal可以让咱们在每个线程中创建一个变量的“私有副本”。这就意味着&#xff0c;每个线程…...

【重点】【DP】300. 最长递增子序列

题目 更好的方法是耐心排序&#xff0c;参见《算法小抄》的内容&#xff01;&#xff01;&#xff01; 法1&#xff1a;DP 基础解法必须掌握&#xff01;&#xff01;&#xff01; class Solution {public int lengthOfLIS(int[] nums) {if (nums null || nums.length 0) …...

使用freessl为网站获取https证书及配置详细步骤

文章目录 一、进入freessl网站二、修改域名解析记录三、创建证书四、配置证书五、服务启动 一、进入freessl网站 首先进入freessl网站&#xff0c;需要注册一个账号 freessl网站 进入网站后填写自己的域名 接下来要求进行DCV配置 二、修改域名解析记录 到域名管理处编辑域名…...

Java-初识正则表达式 以及 练习

目录 什么是正则表达式&#xff1f; 1. 正则表达式---字符类&#xff08;一个大括号匹配一个字符&#xff09;&#xff1a; 2. 正则表达式---预字符类&#xff08;也是匹配一个字符&#xff09;&#xff1a; 正则表达式---数量词 &#xff08;可以匹配多个字符&#xff09;…...

【Flutter 问题系列第 80 篇】TextField 输入框组件限制可输入的最大长度后,输入的内容中包含表情符号时,获取输入的内容数还是会超出限制的问题

这是【Flutter 问题系列第 80 篇】&#xff0c;如果觉得有用的话&#xff0c;欢迎关注专栏。 博文当前所用 Flutter SDK&#xff1a;3.10.5、Dart SDK&#xff1a;3.0.5 一&#xff1a;问题描述 在输入用户名称、简介等内容时&#xff0c;一般我们都会限制输入框内最大可输入…...

漏洞检测和评估【网站子域扫描工具02】

上一篇&#xff1a;爬取目标网站的域名和子域名【网站子域扫描工具01】 在Python中&#xff0c;有一些流行的漏洞扫描库可以对子域进行漏洞扫描和评估&#xff0c;比如Nmap、Sublist3r等。 1.端口扫描 以下是一个简单的示例代码&#xff0c;展示了如何使用Nmap进行基本的端口扫…...

压力测试+接口测试(工具jmeter)

jmeter是apache公司基于java开发的一款开源压力测试工具&#xff0c;体积小&#xff0c;功能全&#xff0c;使用方便&#xff0c;是一个比较轻量级的测试工具&#xff0c;使用起来非常简单。因 为jmeter是java开发的&#xff0c;所以运行的时候必须先要安装jdk才可以。jmeter是…...

LeetCode 46 全排列

题目描述 全排列 给定一个不含重复数字的数组 nums &#xff0c;返回其 所有可能的全排列 。你可以 按任意顺序 返回答案。 示例 1&#xff1a; 输入&#xff1a;nums [1,2,3] 输出&#xff1a;[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]示例 2&#xff1a; 输入…...

智慧医疗能源事业线深度画像分析(上)

引言 医疗行业作为现代社会的关键基础设施,其能源消耗与环境影响正日益受到关注。随着全球"双碳"目标的推进和可持续发展理念的深入,智慧医疗能源事业线应运而生,致力于通过创新技术与管理方案,重构医疗领域的能源使用模式。这一事业线融合了能源管理、可持续发…...

JavaScript 中的 ES|QL:利用 Apache Arrow 工具

作者&#xff1a;来自 Elastic Jeffrey Rengifo 学习如何将 ES|QL 与 JavaScript 的 Apache Arrow 客户端工具一起使用。 想获得 Elastic 认证吗&#xff1f;了解下一期 Elasticsearch Engineer 培训的时间吧&#xff01; Elasticsearch 拥有众多新功能&#xff0c;助你为自己…...

uni-app学习笔记二十二---使用vite.config.js全局导入常用依赖

在前面的练习中&#xff0c;每个页面需要使用ref&#xff0c;onShow等生命周期钩子函数时都需要像下面这样导入 import {onMounted, ref} from "vue" 如果不想每个页面都导入&#xff0c;需要使用node.js命令npm安装unplugin-auto-import npm install unplugin-au…...

将对透视变换后的图像使用Otsu进行阈值化,来分离黑色和白色像素。这句话中的Otsu是什么意思?

Otsu 是一种自动阈值化方法&#xff0c;用于将图像分割为前景和背景。它通过最小化图像的类内方差或等价地最大化类间方差来选择最佳阈值。这种方法特别适用于图像的二值化处理&#xff0c;能够自动确定一个阈值&#xff0c;将图像中的像素分为黑色和白色两类。 Otsu 方法的原…...

Qwen3-Embedding-0.6B深度解析:多语言语义检索的轻量级利器

第一章 引言&#xff1a;语义表示的新时代挑战与Qwen3的破局之路 1.1 文本嵌入的核心价值与技术演进 在人工智能领域&#xff0c;文本嵌入技术如同连接自然语言与机器理解的“神经突触”——它将人类语言转化为计算机可计算的语义向量&#xff0c;支撑着搜索引擎、推荐系统、…...

第25节 Node.js 断言测试

Node.js的assert模块主要用于编写程序的单元测试时使用&#xff0c;通过断言可以提早发现和排查出错误。 稳定性: 5 - 锁定 这个模块可用于应用的单元测试&#xff0c;通过 require(assert) 可以使用这个模块。 assert.fail(actual, expected, message, operator) 使用参数…...

鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院查看报告小程序

一、开发环境准备 ​​工具安装​​&#xff1a; 下载安装DevEco Studio 4.0&#xff08;支持HarmonyOS 5&#xff09;配置HarmonyOS SDK 5.0确保Node.js版本≥14 ​​项目初始化​​&#xff1a; ohpm init harmony/hospital-report-app 二、核心功能模块实现 1. 报告列表…...

Neo4j 集群管理:原理、技术与最佳实践深度解析

Neo4j 的集群技术是其企业级高可用性、可扩展性和容错能力的核心。通过深入分析官方文档,本文将系统阐述其集群管理的核心原理、关键技术、实用技巧和行业最佳实践。 Neo4j 的 Causal Clustering 架构提供了一个强大而灵活的基石,用于构建高可用、可扩展且一致的图数据库服务…...

AI编程--插件对比分析:CodeRider、GitHub Copilot及其他

AI编程插件对比分析&#xff1a;CodeRider、GitHub Copilot及其他 随着人工智能技术的快速发展&#xff0c;AI编程插件已成为提升开发者生产力的重要工具。CodeRider和GitHub Copilot作为市场上的领先者&#xff0c;分别以其独特的特性和生态系统吸引了大量开发者。本文将从功…...

实现弹窗随键盘上移居中

实现弹窗随键盘上移的核心思路 在Android中&#xff0c;可以通过监听键盘的显示和隐藏事件&#xff0c;动态调整弹窗的位置。关键点在于获取键盘高度&#xff0c;并计算剩余屏幕空间以重新定位弹窗。 // 在Activity或Fragment中设置键盘监听 val rootView findViewById<V…...