Flink SQL:查询、窗口和时间 – 第 1 部分

时间是流处理中的一个关键因素,因为数据在到达时就被处理,并且必须快速处理以避免延迟。流处理中时间的普遍性意味着数据处理的设计必须考虑到时间因素。基于时间的窗口是流处理中常用的技术,用于确保数据得到及时处理。流处理可用于各种应用程序,例如监控系统、欺诈检测以及任何想要提供实时数据的应用程序。 -时间洞察。流处理中普遍存在的时间给数据处理带来了挑战和机遇。通过正确的设计,流处理可用于提供对数据流的实时洞察。在这篇文章中,我们将了解在使用 Flink SQL 时如何考虑时间。

时间戳和查询

在流处理中,时间戳是用于记录事件发生的时间。此信息可用于确定处理事件所需的时间,或监视流处理系统的性能。时间戳还可以用于对同时发生的事件进行排序。

示例:

  • 用户交互:点击
  • 应用程序日志:应用程序
  • 机器事务:信用卡、广告服务
  • 传感器:手机、汽车、物联网

流处理中涉及时间的查询通常是用于分析一段时间内的数据。这可能涉及查找数据中的趋势或模式,或比较不同时间段的数据。流处理系统通常提供对数据加窗的方法,以便仅考虑特定时间段的数据。这使得可以对传入的数据进行实时分析,或者对历史数据进行分析。

示例:

  • 最后一分钟的平均值
  • 使用最新汇率加入
  • 在 5 分钟内尝试 3 次失败后发出警报

时间属性

流处理中有多种不同的时间属性。它们是事件时间、处理时间和摄取时间。

  • 事件时间是事件发生时的时间戳。
  • 处理时间是处理事件的时间戳。
  • 摄取时间是事件被摄取到系统中的时间戳。

事件时间是唯一完全由用户控制的时间属性。所有其他时间属性均由系统控制。

事件时间允许用户控制事件发生的时间,这在某些情况下非常重要。处理时间可能会受到系统速度的影响。在某些情况下,系统可能会很慢并且处理时间可能会延迟。在其他情况下,系统可能很快,处理时间可能比预期早。

摄取时间完全不受用户控制。提取时间由系统控制,取决于系统的速度。

事件时间属性

事件时间属性是带有关联水印的 TIMESTAMP 或 TIMESTAMP_LTZ。水印使用有界无序水印策略。

  • TIMESTAMP 是一种记录精确到小数秒的日期和时间的数据类型,而 TIMESTAMP_LTZ(本地时区)是一种存储日期、时间和本地时区的数据类型。

访问 Flink 官方文档网站了解更多信息。

CREATE TABLE clicks (
  user STRING,
  url STRING,
  cTime TIMESTAMP_LTZ(3),
  cTime WITH WATERMARK AS cTime - INTERVAL '2' MINUTES
)

处理时间属性

处理时间属性是一个计算列,不保存数据;每当访问该属性时都会查询本地计算机时间。处理时间属性可以像常规 TIMESTAMP_LTZ 一样使用。

CREATE TABLE clicks (
  user STRING,
  url STRING,
  cTime AS PROCTIME()
)

随着时间推移,状态可能会过期,例如,在长达一小时的窗口中对每个用户的点击进行计数。

  • 事件时间 windows:clicks 将计入其发生的小时。水印触发关闭窗口并丢弃其状态。
  • 处理时间 windows:clicks 将计入当前时间处理时的小时。本地系统时钟触发关闭窗口并丢弃其状态。

如果输入表中没有时间属性,窗口操作员将不知道窗口何时完成。

时间戳与时间属性

在流处理中有两种表示时间的常见方法:时间戳和时间属性。时间戳是与事件关联的时间点,而时间属性可以存在于每个表模式中。时间戳更精确,但时间属性更灵活,可用于表示复杂的时间关系。

时态运算符

时态运算符是流处理中处理基于时间的数据的一种方法。有几种不同类型的时态运算符:

  • 窗口:窗口是数据的集合,在特定的时间范围内被处理。窗口可以是滚动的、跳跃的,或者会话的。
  • 聚合:聚合是对数据的集合进行操作,以产生单个值。聚合可以是平均值、计数或总和等。
  • 连接:连接是将两个数据集合结合起来,以便可以根据它们的时间属性进行比较。连接可以是基于事件时间、处理时间或摄取时间的。
  • 模式匹配:模式匹配是对数据的集合进行操作,以查找满足特定模式的数据。模式可以是简单的,如连续的数字,也可以是复杂的,如识别欺诈交易的模式。

时态运算符及时跟踪进度,以确定输入何时完成。它们发出无法更新的最终结果行,并且能够丢弃不再需要的状态(记录和结果)。

窗口示例

窗口是流处理中处理基于时间的数据的一种常见方法。有几种不同类型的窗口,每个窗口都有其优点和缺点。

  • 滚动窗口:滚动窗口是数据的集合,在特定的时间范围内被处理。滚动窗口随着时间的推移而移动,因此每次窗口中的数据都不同。滚动窗口适用于需要实时分析的数据。
  • 跳跃窗口:跳跃窗口是数据的集合,在特定的时间间隔内被处理。跳跃窗口不随着时间的推移而移动,因此每次窗口中的数据相同。跳跃窗口适用于需要每隔一段时间分析的数据。
  • 会话窗口:会话窗口是数据的集合,在没有活动的情况下保持打开状态。会话窗口适用于需要分析数据流中的活动的数据。

窗口表值函数

窗口表值函数 (WTVF) 是一种特殊函数,可用于从窗口中返回数据。WTVF 可以用于聚合窗口数据、计算窗口统计信息或查找模式。

结论

在流处理中,时间是一个关键因素。时间属性和时态运算符是流处理中处理基于时间的数据的强大工具。通过正确的设计,可以使用这些工具来提供对数据流的实时洞察。

关注公众号“大模型全栈程序员”回复“大数据面试”获取800页左右大数据面试宝典 ,回复“大数据”获取多本大数据电子书

关注公众号“大模型全栈程序员”回复“小程序”获取1000个小程序打包源码。更多免费资源在http://www.gitweixin.com/?p=2627