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

建设一个外贸网站多少钱甘肃省建设工程网站

建设一个外贸网站多少钱,甘肃省建设工程网站,注入漏洞网站源码,wordpress禁止游客访问Flink SQL 基础概念#xff1a;SQL 动态表 连续查询 1.SQL 应用于流处理的思路2.流批处理的异同点及将 SQL 应用于流处理核心解决的问题3.SQL 流处理的输入#xff1a;输入流映射为 SQL 动态输入表4.SQL 流处理的计算#xff1a;实时处理底层技术 - SQL 连续查询5.SQL… Flink SQL 基础概念SQL 动态表 连续查询 1.SQL 应用于流处理的思路2.流批处理的异同点及将 SQL 应用于流处理核心解决的问题3.SQL 流处理的输入输入流映射为 SQL 动态输入表4.SQL 流处理的计算实时处理底层技术 - SQL 连续查询5.SQL 流处理实际应用动态表 连续查询技术的两个实战案例5.1 查询案例一5.2 案例二 6.SQL 连续查询的两种类型更新Update查询 追加Append查询7.SQL 流处理的输出动态输出表转化为输出数据8.补充知识SQL 与关系代数 1.SQL 应用于流处理的思路 在流式 SQL 诞生之前所有的基于 SQL 的数据查询都是基于批数据的没有将 SQL 应用到流数据处理这一说法。 那么如果我们想将 SQL 应用到流处理中必然要站在巨人的肩膀批数据处理的流程上面进行那么具体的分析思路如下 1️⃣ 先比较 批处理 与 流处理 的异同之处如果有相同的部分那么可以直接复用不同之处才是我们需要重点克服和关注的。2️⃣ 摘出 1️⃣ 中说到的不同之处分析如果要满足这个不同之处目前有哪些技术是类似的。3️⃣ 再从这些类似的技术上进一步发展以满足将 SQL 应用于流任务中。 博主下文就会根据上述三个步骤来一步一步介绍 动态表 诞生的背景以及这个概念是如何诞生的。 2.流批处理的异同点及将 SQL 应用于流处理核心解决的问题 首先对比一下常见的 批处理 和 流处理 中 数据源输入表、处理逻辑、数据汇结果表的异同点。 输入表 处理逻辑 结果表 批处理静态表输入数据有限、是有界集合批式计算每次执行查询能够访问到完整的输入数据然后计算输出完整的结果数据静态表数据有限流处理动态表输入数据无限数据实时增加并且源源不断流式计算执行时不能够访问到完整的输入数据每次计算的结果都是一个中间结果动态表数据无限 对比上述流批处理之后我们得到了要将 SQL 应用于流式任务的三个要解决的核心点 1️⃣ SQL 输入表分析如何将一个实时的源源不断的输入流数据表示为 SQL 中的输入表。2️⃣ SQL 处理计算分析将 SQL 查询逻辑翻译成什么样的底层处理技术才能够实时的处理流式输入数据然后产出流式输出数据。3️⃣ SQL 输出表分析如何将 SQL 查询输出的源源不断的流数据表示为一个 SQL 中的输出表。 将上面 3 个点总结一下也就引出了本节的 动态表 和 连续查询 两种技术方案 动态表源源不断的输入、输出流数据映射到动态表。连续查询实时处理输入数据产出输出数据的实时处理技术。 3.SQL 流处理的输入输入流映射为 SQL 动态输入表 动态表。这里的动态其实是相比于批处理的静态有界来说的。 静态表应用于批处理数据中静态表可以理解为是不随着时间实时进行变化的。一般都是一天、一小时的粒度新生成一个分区。动态表动态表是随时间实时进行变化的。是将 SQL 体系中表的概念应用到 Flink 上面的的核心点。 来看一个具体的案例下图显示了点击事件流左侧如何转换为动态表右侧。当数据源生成更多的点击事件记录时映射出来的动态表也会不断增长这就是动态表的概念 4.SQL 流处理的计算实时处理底层技术 - SQL 连续查询 部分高级关系数据库系统提供了一个称为 物化视图Materialized Views的特性。 物化视图其实就是一条 SQL 查询就像常规的虚拟视图 VIEW 一样。但与虚拟视图不同的是物化视图会缓存查询的结果因此在请求访问视图时不需要对查询进行重新计算可以直接获取物化视图的结果小伙伴萌可以认为物化视图其实就是把结果缓存了下来。 举个例子批处理中如果以 Hive 天级别的物化视图来说其实就是每天等数据源准备好之后调度物化视图的 SQL 执行然后产生新的结果提供服务。那么就可以认为一条表示了输入、处理、输出的 SQL 就是一个构建物化视图的过程。 映射到我们的流任务中输入、处理逻辑、输出这一套流程也是一个物化视图的概念。相比批处理来说流处理中我们的数据源表的数据是源源不断的。那么从输入、处理、输出的整个物化视图的维护流程也必须是实时的。 因此我们就需要引入一种 实时视图维护Eager View Maintenance的技术去做到一旦更新了物化视图的数据源表就立即更新视图的结果从而保证输出的结果也是最新的。 这种实时视图维护的技术就叫做 连续查询Continuous Query。 注意 连续查询 不断的消费动态输入表的的数据不断的更新动态结果表的数据。连续查询 的产出的结果 批处理模式在输入表的上执行的相同查询的结果。相同的 SQL对应于同一个输入数据虽然执行方式不同但是流处理和批处理的结果是永远都会相同的。 5.SQL 流处理实际应用动态表 连续查询技术的两个实战案例 动态表 连续查询 两项技术在一条流 SQL 中的执行流程总共包含了三个步骤如下图及总结所示 1️⃣ 将数据输入流转换为 SQL 中的动态输入表。这里的转化其实就是指将输入流映射绑定为一个动态输入表。上图虽然分开画了但是可以理解为一个东西。2️⃣ 在动态输入表上执行一个连续查询然后生成一个新的动态结果表。3️⃣ 生成的动态结果表被转换回数据输出流。 我们实际介绍一个案例来看看其运行方式以上文介绍到的点击事件流为例点击事件流数据的字段如下 [user: VARCHAR, // 用户名cTime: TIMESTAMP, // 访问 URL 的时间url: VARCHAR // 用户访问的 URL ]第一步将输入数据流映射为一个动态输入表。以下图为例我们将点击事件流图左转换为动态表图右。当点击数据源源不断的来到时动态表的数据也会不断的增加。 第二步在点击事件流映射的动态输入表上执行一个连续查询并生成一个新的动态输出表。 下面介绍两个查询的案例。 5.1 查询案例一 第一个查询一个简单的 GROUP BY COUNT 聚合查询写过 SQL 的都不会陌生吧这种应该都是最基础最常用的对数据按照类别分组的方法。 如下图所示 group by 聚合的常用案例。 那么本案例中呢是基于 clicks 表中 user 字段对 clicks 表点击事件流进行分组来统计每一个 user 的访问的 URL 的数量。下面的图展示了当 clicks 输入表来了新数据即表更新时连续查询 的计算逻辑。 当查询开始clicks 表左侧是空的。 当第一行数据被插入到 clicks 表时连续查询开始计算结果数据。数据源表第一行数据 [Mary,./home] 输入后会计算结果 [Mary, 1] 插入结果表。当第二行 [Bob, ./cart] 插入到 clicks 表时连续查询会计算结果 [Bob, 1]并插入到结果表。第三行 [Mary, ./prod?id1] 输出时会计算出 [Mary, 2]user 为 Mary 的数据总共来过两条所以为 2并更新结果表[Mary, 1] 更新成 [Mary, 2]。最后当第四行数据加入 clicks 表时查询将第三行 [Liz, 1] 插入结果表中。 注意上述特殊标记出来的字体可以看到连续查询对于结果的数据输出方式有两种 插入insert结果表更新update结果表 大家对于 插入insert结果表这件事都比较好理解因为离线数据都只有插入这个概念。但是 更新update结果表就是离线处理中没有概念了。这就是连续查询中中比较重要一个概念。后文会介绍。 5.2 案例二 接下来介绍第二条查询语句。第二条查询与第一条类似但是 group by 中除了 user 字段之外还 group by 了 tumble其代表开了个滚动窗口后面会详细说明滚动窗口的作用然后计算 url 数量。 group by user是按照类别横向给数据分组group by tumble 滚动窗口是按时间粒度纵向给数据进行分组。如下图所示。 图形化一解释就很好理解了两种都是对数据进行分组一个是按照 类别 分组另一种是按照 时间 分组。 与前面一样左边显示了输入表 clicks。查询每小时持续计算结果并更新结果表。clicks 表有三列usercTimeurl。其中 cTime 代表数据的时间戳用于给数据按照时间粒度分组。 我们的滚动窗口的步长为 1 小时即时间粒度上面的分组为 1 小时。其中时间戳在 12:00:00 - 12:59:59 之间有四条数据。13:00:00 - 13:59:59 有三条数据。14:00:00 - 14:59:59 之间有四条数据。 当 12:00:00 - 12:59:59 数据输入之后1 小时的窗口连续查询计算的结果如上图所示将 [Mary, 3][Bob, 1] 插入结果表。当 13:00:00 - 13:59:59 数据输入之后1 小时的窗口连续查询计算的结果如上图所示将 [Bob, 1][Liz, 2] 插入结果表。当 14:00:00 - 14:59:59 数据输入之后1 小时的窗口连续查询计算的结果如上图所示将 [Mary, 1][Bob, 2][Liz, 1] 插入结果表。 而这个查询只有 插入insert结果表这个行为。 6.SQL 连续查询的两种类型更新Update查询 追加Append查询 虽然前一节的两个查询看起来非常相似都计算分组进行计数聚合但它们在一个重要方面不同 第一个查询group by user即 Update 查询会更新先前输出的结果即结果表流数据中 包含 INSERT 和 UPDATE 数据。小伙伴萌可以理解为 group by user 这条语句当中输入源的数据是一直有的源源不断的同一个 user 的数据之后可能还是会有的因此可以认为此 SQL 的每次的输出结果都是一个中间结果 当同一个 user 下一条数据到来的时候就要用新结果把上一次的产出中间结果旧结果给 UPDATE 了。所以这就是 UPDATE 查询的由来其中 INSERT 就是第一条数据到来的时候没有之前的中间结果所以是 INSERT。第二个查询group by user, tumble(xxx)即 Append 查询只追加到结果表即结果表流数据中 只包含 INSERT 的数据。小伙伴萌可以理解为虽然 group by user, tumble(xxx) 上游也是一个源源不断的数据但是这个查询本质上是对时间上的划分而时间都是越变越大的当前这个滚动窗口结束之后后面来的数据的时间都会比这个滚动窗口的结束时间大都归属于之后的窗口了当前这个滚动窗口的结果数据就不会再改变了因此这条查询只有 INSERT 数据即一个 Append 查询。 上面是 Flink SQL 连续查询处理机制上面的两类查询方式。我们可以发现连续查询的处理机制不一样产出到结果表中的结果数据也是不一样的。针对上面两种结果表的更新方式Flink SQL 提出了 changelog 表的概念来进行兼容。 changelog 表这个概念其实就和 MySQL binlog 是一样的。会包含 INSERT、UPDATE、DELETE 三种数据通过这三种数据的处理来描述实时处理技术对于动态表的变更 changelog 表即第一个查询的输出表输出结果数据不但会追加还会发生更新。changelog insert-only 表即第二个查询的输出表输出结果数据只会追加不会发生更新。 7.SQL 流处理的输出动态输出表转化为输出数据 可以看到我们的标题都是随着一个 SQL 的生命周期的。从 输入流映射为 SQL 动态输入表、实时处理底层技术 - SQL 连续查询 到本小节的 SQL 动态输出表转化为输出数据。都是有逻辑关系的。 我们上面介绍到了连续查询的输出结果表是一个 changelog。其可以像普通数据库表一样通过 INSERT、UPDATE 和 DELETE 来不断修改。 它可能是一个只有一行、不断更新 changelog 表也可能是一个 insert-only 的 changelog 表没有 UPDATE 和 DELETE 修改或者介于两者之间的其他表。 在将动态表转换为流或将其写入外部系统时需要对这些不同状态的数据进行编码。Flink 的 Table API 和 SQL API 支持三种方式来编码一个动态表的变化: 1️⃣ Append-only 流输出的结果只有 INSERT 操作的数据。2️⃣ Retract 流 Retract 流包含两种类型的 messageadd messages 和 retract messages。其将 INSERT 操作编码为 add message、将 DELETE 操作编码为 retract message、将 UPDATE 操作编码为更新先前行的 retract message 和更新新行的 add message从而将动态表转换为 Retract 流。Retract 流写入到输出结果表的数据如下图所示有 - 两种分别 - 代表撤回旧数据 代表输出最新的数据。这两种数据最终都会写入到输出的数据引擎中。如果下游还有任务去消费这条流的话要注意需要正确处理 - 两种数据防止数据计算重复或者错误。 3️⃣ Upsert 流 Upsert 流包含两种类型的 messageupsert messages 和 delete messages。转换为 Upsert 流的动态表需要唯一键唯一键可以由多个字段组合而成。其会将 INSERT 和 UPDATE 操作编码为 upsert message将 DELETE 操作编码为 delete message。Upsert 流写入到输出结果表的数据如下图所示每次输出的结果都是当前每一个 user 的最新结果数据不会有 Retract 中的 - 回撤数据。如果下游还有一个任务去消费这条流的话消费流的算子需要知道唯一键即 user以便正确地根据唯一键user去拿到每一个 user 当前最新的状态。其与 Retract 流的主要区别在于 UPDATE 操作是用单个 message 编码的因此效率更高。下图显示了将动态表转换为 Upsert 流的过程。 8.补充知识SQL 与关系代数 小伙伴萌会问到关系代数是啥东西 其实关系代数就是对于数据集即表的一系列的 操作即查询语句。常见关系代数有 那么 SQL 和关系代数是啥关系呢 SQL 就是能够表示关系代数一种面向用户的接口即 用户能使用 SQL 表达关系代数的处理逻辑也就是我们可以用 SQL 去在表数据集上执行我们的业务逻辑操作关系代数操作。
http://www.zqtcl.cn/news/623441/

相关文章:

  • 建网站要多少钱用自己的服务器河北工程大学网站开发成本
  • 宁波网站建站公司商务网站模块设计时前台基础设施建设不包括
  • 徐州免费网站制作怎么用阿里云服务器搭建wordpress
  • php猎奇源码 织梦新闻视频图片八卦娱乐趣事资讯门户网站模板html代码表格
  • 南通做网站优化哪家好网页策划书 网站建设定位
  • 防止访问网站文件夹绵阳 网站设计
  • 网页与网站的区别是什么东莞网站公司排名
  • 盐城市城乡和住房建设厅网站wordpress文章订阅
  • 济南网站优化wordpress文件上传到那个文件
  • 外贸网站租用外国服务器好还是自己装一个服务器好高质量外链网站
  • 珠海专门做网站成都到西安
  • 网站做1920px好吗长沙seo优化排名
  • 哈尔滨微信网站开发wordpress 视
  • wordpress 分享封面图片尺寸重庆官网优化乐育公司
  • dede手机网站更新受欢迎的昆明网站建设
  • 网站设计外包合同专做自驾游的网站
  • 网站建设服务预算游戏网站怎么赚钱
  • 怎么做网站关键词视频手机网页前端开发
  • 好网站具备条件网站建设外链
  • 青岛如何建立企业网站企业中国数据域名注册
  • 怎么看网站做的好不好南京h5 网站建设
  • 贵阳微信网站制作下列哪一项不属于电子商务网站建设
  • 有没有做电子名片的网站网络广告怎么投放
  • 网站开发要用cms教育网站制作价格
  • 深圳华鑫峰网站建设wordpress 关闭新闻
  • 韩国网站加速器南宁做网站seo
  • 义乌网站建设公司书生商友小程序自己制作流程
  • 株洲企业网站建设费用python mysql开发网站开发
  • 东航集团客户网站是哪家公司建设网站开发软件开发
  • 淮安企业网站制作科技公司办公室设计