【译】用SQL统一所有:一种有效的、语法惯用的流和表管理方法

现在还没有一个统一的流式SQL语法标准,各家都在做自己的。本文在一些业界应用的基础上提出了一个统一SQL语法的建议。Spark同样存在这个问题,社区版本在流式SQL上迟迟没有动作。EMR Spark在今年上半年提供了自己设计版本的流式SQL支持,也会在后续的更新中吸收和支持这些优秀的设计建议。

原文:https://blog.acolyer.org/2019/07/03/one-sql-to-rule-them-all/

资料:One SQL to rule them all: an efficient and syntactically idiomatic approach to management of streams and tables Begoli et al., SIGMOD’19

在数据处理方面,似乎最终都会回归到SQL上!今天选择的这篇文章作者来自于Apache Beam,Apache Calcite以及Apache Flink的专家们,阐述了他们在构建流式处理SQL接口的经验。最终整理了一些SQL标准的扩展建议。

The thesis of this paper, supported by experience developing large open-source frameworks supporting real-world streaming use cases, is that the SQL language and relational model as-is and with minor non-intrusive extensions, can be very effective for manipulation of streaming data.

这篇文章的论点是,在开发使用大规模开源框架解决现实世界的实际流式场景经验下,SQL语言及关系性模型在当前及非侵入式扩展后,对于流数据的操作非常有效。

文章中很多观点已经在Apache Beam,Apache Calcite以及Apache Flink中实现,或者作为众多选择之一。Streaming SQL已经在阿里巴巴,华为,Lyft,Uber及其他一些公司中应用。下面是一些他们的反馈,为啥做这样的选择:

  • 开发和应用成本相对于那些非声明性流处理 API要低得多。
  • 比起非标准化的查询语言,熟悉SQL更容易开发应用。
  • 常见的窗口聚合及join等处理任务,基于event-time可以更方便的表达及更高效的执行。
  • 当应用出错或者服务中断时,可以很方便地使用同一个查询语句对记录存储的数据进行处理。

1. 基本原则

Combined, tables and streams cover the critical spectrum of business operations ranging from strategic decision making supported by historical data to near- and real-time data used in interactive analysis… We believe, based on our experience and nearly two decades of research on streaming SQL extensions, that using the same SQL semantics in a consistent manner is a productive and elegant way to unify these two modalities of data…

总的来说,表和流覆盖了业务运营的关键范围,从历史数据支持的战略决策到交互式分析中使用到的近实时数据。我们相信,基于我们的经验和近 20 年对流式 SQL 扩展的研究,以一致的方式使用相同的 SQL 语义是统一这两种数据模式的高效和优雅方式。

正如作者指出的一样,过去许多年里已经进行了很多前期工作,文章中也借鉴了很多其中大部分。最重要的是,它们是基于使用Apache Flink、Beam以及Calcite所获得的经验教训。

相比于传统的关系性视图,流式应用多了一个Time概念。请注意,在一个用户多次查询中,一个可变的数据表实际上就是一个随时间变化的表,即time-varying relation (TVR)。也就是说,任何一次查询结果,都只是代表了那个时间点的表数据。

A time-varying relation is exactly what the name implies: a relationship whose contents may vary over time… The key insight, stated but under-utilized in prior work, is that streams and tables are two representations for one semantic object.

一个时变表就像它的名字所蕴含的一样:表的数据内容可能随着时间变化而变化。在以前的工作中,指出但未充分利用的观点是,流和表是一个语义对象的两个表示形式。

按照定义,TVR支持所有的关系型操作,即使在涉及时变关系数据的场景中也是如此。所以文中提出的第一个建议实际上就是no-op!所以让我们使用它们,并明确说明SQL是在TVRs上操作的。

我们确实需要做一些扩展来支持event-time。我们尤其需要小心地区分event-time和processing-time。我们还需要理解,事件并不一定是按照事件时间顺序呈现的。

We propose to support event time semantics via two concepts: explicit event timestamps and watermarks. Together, these allow correct event time calculation, such as grouping into intervals (or windows) of event time, to be effectively expressed and carried out without consuming unbounded resources.

我们提出通过两个概念来支持event-time语义:显式的时间时间戳以及watermarks。两相结合,就可以正确地支持event-time计算,例如按时间窗口group,这样可以高效的表达和计算,而无需消耗大量的资源。

Watermark可以追溯至Millwheel, Google Cloud Dataflow,直到Apache Beam and Apache Flink。在处理时间的每一刻,watermark确定了一个时间戳,这个时间戳确定在处理时间上事件完整性的时间界限。

文章第三块讲述了控制关系型数据如何呈现以及何时物化数据行。例如:查询结果是立刻更新来反映任何输入的新数据,还是在一个时间窗口末尾处展示完整的数据更新。

2. 示例

NEXmark(一个流式查询的benckmark) Query7实现了一个监控竞拍中最高价物品的逻辑。每10分钟,查询返回最高的bid及相关的itemid。

下面这张图展示了如何使用Streaming SQL来表达。我没有对业务逻辑做过多的描述,而是对查询本身进了注释。希望这已经足够让你们理解要点了。

输入以下数据:

8:21分查询时,会得到如下TVR:

但如果在8:13分查询时,结果又不一样:

注意,正如目前所表达的,查询返回时间点结果,但是如果我们愿意,我们可以使用物化延迟的方式来改变结果的展示方式。例如“SELECT ... EMIT AFTER WATERMARK;”,查询结果只会在watermark到达了时间窗口末尾时才更新。

所以,在8:16,我们会看到:

然后到了8:21,会看到:

如果希望看到不带watermark的窗口行,但只要得到周期性的局和结果,我们可以使用“SELECT ... EMIT STREAM AFTER DELAY”(这里STREAM表示我们希望流式地展示查询结果)。

3. SQL扩展

希望这能给你带来帮助。目前,该建议包含对标准SQL的7个扩展:

  • Watermarked event time column:关系型表中带有watermark的类型为TIMESTAMP的列。watermark由系统进行维护。
  • Grouping on event timestamps:当“Group By”字句作用于时间列时,只包含那些key小于时间列定义的watermark的groups。
  • Event-time windowing functions:以Tumble和Hop开头,参数包括数据表和时间列描述符,返回一个添加了时间列的数据表。Tumble产生间距相等的不相交窗口,Hop生成同等大小的滑动窗口。
  • Stream materialization:“EMIT STREAM”会产生一个按时间变化的结果表,区别于传统的查询结果。新增一个列来指明一个数据行是否是上一行的撤回,该行的日志更新处理时间偏移量以及相对于同一事件时间分组的其他更新的序列号。
  • Materialization delay: 当查询带有“EMIT AFTER WATERMARK”修饰语,只有完整的结果行才会物化。
  • Periodic materialization: 当查询带有“EMIT AFTER DELAY d”修饰语,查询结果间隔d个周期才会输出出来。
  • Combined materialization delay: 当查询带有“EMIT AFTER DELAY d AND AFTER WATERMARK ”修饰语,查询结果间只会在隔d个周期且数据完整的时候才会输出出来。

3.1 Hop示例

3.2 Emit Stream示例

4.经验教训

文章中的第5节列出了从Apache Calcite、Flink和Beam中学到的经验教训,这些经验教训为设计提供了参考。我没有足够时间来一一介绍,下面节点比较吸引我的注意:

  • 因为事件时间戳只是常规属性,可以在普通表达式中引用,所以表达式结果可能不会与watermark保持一致,这在查询计划中需要考虑。
  • 用户发现很难推断查询中事件时间的最佳使用情况,这可能导致使用不合预期的语义执行计划。

5. 未来工作

对我来说,印象深刻的是用尽量少的改动达到目的。文章中的“future work”部分显示,文中提出的那些扩展还需要进一步完善才行。

例如,我注意到的一点是,SQL标准定义中规定SQL查询中的time是查询的时间点(要么是当前时间,要么是使用“AS OF SYSTEM TIME”指定的时间)。这意味着您还不能在stream尾上表达视图(你可以使用类似“CURRENT_TIME - INTERVAL ‘1’ HOUR”的表达式,但是查询执行时,“CURRENT_TIME”取一个固定值)。


原文链接
本文为云栖社区原创内容,未经允许不得转载。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/518390.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

透过 In-memory Channel 看 Knative Eventing 中 Broker/Trigger 工作机制

In-memory Channel是当前Knative Eventing中默认的Channel, 也是一般刚接触Knative Eventing首先了解到的Channel。本文通过分析 In-memory Channel 来进一步了解 Knative Eventing 中Broker/Trigger事件处理机制。 事件处理概览 我们先整体看一下Knative Eventing 工作机制示…

css-三种基本选择器

一、标签选择器 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Title</title><style>/* 标签选择器&#xff0c;会选择到页面上所有的这个标签的元素 */h1{color: #12ec4e;background: …

你知道吗?其实 Oracle 直方图自动统计算法存在这些缺陷!(附验证步骤)

作者 | 吴海存责编 | Carol出品 | CSDN 云计算&#xff08;ID&#xff1a;CSDNcloud&#xff09;封图| CSDN下载于视觉中国在某些场景下&#xff0c;表中某一列的数据分布会比较崎岖&#xff0c;使得CBO(cost base optimizer)在评估执行计划的时候可能会出现误差&#xff0c;从…

开源软件 Apache Dubbo 牵手 IDE 插件,开发部署提速不止 8 倍

自从产品经理银时小伙和他的团队在去年11月发布 Cloud Toolkit&#xff08;一款 IDE 插件&#xff09;以来&#xff0c;已帮助数以万计的开发者们提高了开发、测试、诊断以及应用部署效率。期间&#xff0c;他们还发布了 Contributor Ranking List&#xff0c;和开发者们一同定…

css-层次选择器

一、后代选择器 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Title</title><style>/* 后代选择器 */body ul p{background: red;}body p{background: yellow;}</style> </he…

技术人具备“结构化思维”意味着什么?

阿里妹导读&#xff1a;在日常工作中&#xff0c;我们时常会碰到这样的情况&#xff0c;有的人讲事情逻辑非常混乱&#xff0c;罗列了很多事项&#xff0c;却把握不到重点&#xff0c;无法把一件事情说清楚。这种思维混乱是典型的缺少结构化思维的表现。结构化思维非常重要&…

奇奇怪怪的知识增加了,大括号的历史你知道吗?

作者 | Michael McMillan译者 | 弯月&#xff0c;责编 | 夕颜封图 | CSDN下载自视觉中国出品 | CSDN&#xff08;ID:CSDNnews&#xff09;众所周知的标志代码块起始和结尾的大括号是什么时候开始成为编程语言的一部分的呢&#xff1f;或者更重要的是&#xff0c;代码块何时成了…

5年时间,我从开发做到总裁的秘籍--如何提升技术型管理者的领导力

对于深耕技术的一线开发者而言&#xff0c;大多数都希望把技术工作进行到底&#xff0c;或者一直从事和技术技术相关性更高的工作。但随着年龄和经验的增长&#xff0c;我对管理和技术的思考越来越多、越来越深入&#xff0c;和大多数人一样&#xff0c;站在这个路口——到底继…

css-结构伪类选择器

<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Title</title><style>/* ul的第一个子元素 */body ul li:first-child{background: #12ec4e;}/* ul的最后一个子元素 */ul li:last-child…

闲鱼无障碍是怎么在端侧实现的

Hi&#xff0c;小伙伴们还记得之前刷屏的“闲鱼为1700万人&#xff0c;打造了一条盲道”的文章吗&#xff1f; 在今年4月&#xff0c;闲鱼和深圳市信息无障碍研究会取得了联系。在沟通过程中&#xff0c;我们了解到在移动互联网时代&#xff0c;视障人士同样可以通过手机&#…

面试造飞机系列:看架构师如何设计微服务接口

来源 | 后端技术学堂责编 | Carol封图| CSDN下载于视觉中国 在微服务设计中&#xff0c;服务间接口通信设计常见的有两种方式&#xff1a;RPC 和 REST&#xff0c;关于微服务和 RPC 的更多细节&#xff0c;可以参考我上一篇文章 面试都在问的微服务&#xff0c;一文带你彻底搞…

日均处理万亿数据!Flink在快手的应用实践与技术演进之路

董亭亭&#xff0c;快手大数据架构实时计算引擎团队负责人。目前负责 Flink 引擎在快手内的研发、应用以及周边子系统建设。2013 年毕业于大连理工大学&#xff0c;曾就职于奇虎 360、58 集团。主要研究领域包括&#xff1a;分布式计算、调度系统、分布式存储等系统。 本次的分…

css-字体样式

字体样式 <!--font-family: 字体font-size: 字体大小font-weight: 字体粗细color: 字体颜色--><style>body{font-family: "Arial Black", 楷体,serif;color: #cdbb21;}h1{font-size: 50px;}.p1{font-weight: bolder;}</style><!--字体风格 ob…

小网站的容器化(下):网站容器化的各种姿势,先跟着撸一波代码再说!

作者 | 王洪鹏责编 | Carol出品 | CSDN云计算&#xff08;ID&#xff1a;CSDNcloud&#xff09;封图| CSDN下载于视觉中国 上篇文章&#xff1a;小网站的容器化(上) 中我们大致描述了下个人网站在日常维护中的痛点&#xff0c;文章的后半部分我们添加了一个纯静态网站容器化的简…

阿里云应用高可用 AHAS 正式商用,可一键提升云上应用可用性

在分布式架构环境下&#xff0c;服务间的依赖日益复杂&#xff0c;可能没有人能说清单个故障对整个系统的影响&#xff0c;构建一个高可用的分布式系统面临着很大挑战。 7月17日&#xff0c;阿里云应用高可用服务AHAS 正式商用&#xff0c;包含架构感知、流控降级和故障演练三…

机器学习在高德起点抓路中的应用实践

导读&#xff1a;高德地图作为中国领先的出行领域解决方案提供商&#xff0c;导航是其核心用户场景。路线规划作为导航的前提&#xff0c;是根据起点、终点以及路径策略设置&#xff0c;为用户量身定制出行方案。 起点抓路&#xff0c;作为路线规划的初始必备环节&#xff0c;…

css-阴影和超链接伪类

阴影和超链接伪类 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Title</title><style>/* 默认的颜色 */a{text-decoration: none; /* 去掉下划线 */color: #000000; /* 修改颜色 */}…

时尚电商新赛道:揭秘 FashionAI 技术

雷音是阿里巴巴研究员、淘系技术部 FashionAI 负责人&#xff0c;在淘系技术嘉年华硅谷站&#xff0c;他分享了《时尚电商新赛道— FashionAI 中的技术》 &#xff0c;旨在揭秘&#xff1a;从面向机器学习的知识重建切入&#xff0c;提出了在 AI 能力的推动下&#xff0c;让人值…

MQ 技术产品井喷,今天来详聊一下腾讯开源消息中间件 TubeMQ | 原力计划

作者 | kimmking来源 | CSDN博客&#xff0c;责编 | 夕颜出品 | CSDN&#xff08;ID:CSDNnews&#xff09;随着分布式技术的发展&#xff0c;MQ技术产品也出现井喷。目前除了各类常用的MQ&#xff0c;比如Apache的ActiveMQ&#xff0c;Kafka&#xff0c;Pulsar&#xff0c;Rock…

MongoDB compact 命令详解

为什么需要 compact 一图胜千言 remove 与 drop 的区别 MongoDB 里删除一个集合里所有文档&#xff0c;有两种方式 db.collection.remove({}, {multi: true})&#xff0c;逐个文档从 btree 里删除&#xff0c;最后所有文档被删除&#xff0c;但文件物理空间不会被回收db.col…