当前位置: 首页 > 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; 输入…...

具身智能:从语言模型到世界模型,【导航】沁恒微 RISC-V 蓝牙 入门教程目录 【快速跳转】。

具身人工智能&#xff1a;从大型语言模型到世界模型 近年来&#xff0c;具身人工智能&#xff08;Embodied AI&#xff09;成为人工智能领域的重要研究方向。它强调智能体通过与物理环境的交互来学习和进化&#xff0c;而非仅仅依赖静态数据集。从大型语言模型&#xff08;LLMs…...

STM32大棚花卉物联网护养系统设计与实现

1. 项目概述这个大棚花卉护养系统是我去年为一个花卉种植基地设计的物联网解决方案。当时客户反映传统人工管理方式效率低下&#xff0c;经常出现浇水不及时、温度控制不精准等问题。经过三个月的开发和调试&#xff0c;这套系统成功将花卉产量提升了30%&#xff0c;同时减少了…...

实战指南:用Python的pyttsx3库打造你的专属语音助手

1. 从零认识pyttsx3&#xff1a;你的代码会说话 第一次听到电脑用标准播音腔朗读出我写的文字时&#xff0c;那种感觉就像小时候收到会说话的生日贺卡。pyttsx3这个神奇的Python库&#xff0c;能让任何文本通过声卡变成人声。不同于需要联网的语音合成服务&#xff0c;它完全离…...

计算机毕业设计:Python汽车销量全栈分析系统 Flask框架 可视化 机器学习 AI 大模型 大数据(建议收藏)✅

1、项目介绍 技术栈&#xff1a;Python语言、Flask框架、ECharts可视化库、MySQL数据库、机器学习算法 功能模块&#xff1a;数据概况展示模块多维度可视化分析模块销量预测模块生产计划辅助模块系统管控模块 项目介绍&#xff1a;本项目为汽车销量可视化分析与预测系…...

HRS广濑电机(HIROSE)推出 AU1 系列获电动车行业顶级制造商采用

HRS广濑电机AU1系列获电动车行业顶级制造商采用作为车载USB Type-C标准化的引领者加速推动下一代车辆的设计进程广濑电机(Hirose Electric)的AU1系列成为连接器行业中首个获大型电动车制造商采纳为其车载USB Type-C接口规格的解决方案。借此契机&#xff0c;我司将与该OEM厂商携…...

解决 Antigravity 新谷歌账户无法登录的问题

最近在使用 Antigravity 时遇到一个奇葩问题&#xff0c;折腾了大半天终于解决&#xff0c;特意记录下来&#xff0c;希望能帮到有同样困扰的小伙伴 —— 老谷歌免费账户能正常登录 Antigravity&#xff0c;但新注册的谷歌 Pro 账户&#xff08;和老账户一样都是美国地区&#…...

告别API依赖!实测具备“看屏幕”能力的Agent,实在Agent如何重构企业自动化天花板?

在2026年这个被业界公认为“智能体元年”的当下&#xff0c;企业数字化转型已从简单的“系统上线”演进到“全量自动化”的深水区。然而&#xff0c;传统API接口的局限性与老旧系统的数据孤岛&#xff0c;始终是横亘在降本增效路上的大山。本文由「企服AI产品测评局」带来深度实…...

热传导方程在工程仿真中就像老朋友的聚会——大家总得找个方式坐下来聊聊温度怎么传。今天咱们用MATLAB折腾几个一维和二维的导热算例,顺便聊聊不同计算格式的脾气

【MATLAB各种计算格式的一维/二维导热算例】 1. 一维下的全显格式&#xff0c;全隐格式&#xff0c;半隐格式的导热算例 2.二维下的全显格式&#xff0c;全隐格式&#xff0c;隐式格式ADI迭代&#xff0c;隐式格式点迭代&#xff0c;隐式格式高斯-赛德点迭代&#xff08;GS&…...

解密Prompt系列69. 从上下文管理到Runtime操作系统

AM&#xff09;”&#xff0c;将 Runtime 视为“状态&#xff08;State&#xff09;”&#xff0c;构建一套属于智能体的“操作系统”。 最近&#xff0c;ByteDance 的 Context-Folding、MIT 的 RLM、以及热门项目 Ralph 的出现&#xff0c;共同指向了一个极其明确的趋势&…...

Vue-Weixin 朋友圈功能实现全解析:图片上传与点赞评论交互详解

Vue-Weixin 朋友圈功能实现全解析&#xff1a;图片上传与点赞评论交互详解 【免费下载链接】vue-weixin Vue2 全家桶仿 微信App 项目&#xff0c;支持多人在线聊天和机器人聊天 项目地址: https://gitcode.com/gh_mirrors/vu/vue-weixin Vue-Weixin 是一个基于 Vue2 全家…...