Flink-Table Streaming 时间属性(五)上

本文深入探讨了Flink处理时间、事件时间和摄取时间的概念,解释了如何在表API和SQL中使用时间属性进行窗口操作,以及如何在数据流转换为表时定义处理时间和事件时间属性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、时间属性
        Flink能够处理基于不同时间概念的流数据。
        处理时间是指执行相应操作的机器的系统时间(也称为“挂钟时间”)。
        事件时间是指基于附加到每一行的时间戳对流数据的处理。时间戳可以在事件发生时进行编码。
        摄取时间是事件进入Flink的时间;在内部,它的处理方式与事件时间类似。
二、时间属性介绍
        基于时间的操作(如表API和SQL中的windows)需要有关时间概念及其来源的信息。因此,表可以提供逻辑时间属性,用于在表程序中指示时间和访问相应的时间戳。
        时间属性可以是每个表架构的一部分。它们是在从数据流创建表时定义的,或者是在使用表源时预定义的。一旦在开始时定义了时间属性,它就可以作为一个字段引用,并且可以在基于时间的操作中使用。
        只要时间属性没有被修改并且只是从查询的一部分转发到另一部分,它就仍然是一个有效的时间属性。时间属性的行为类似于常规时间戳,可以访问以进行计算。如果在计算中使用时间属性,它将被物化并成为常规时间戳。规则时间戳与Flink的时间和水印系统不兼容,因此不能再用于基于时间的操作。

三、处理时间
        处理时间允许表程序根据本地机器的时间生成结果。它是时间的最简单概念,但不提供决定论。它既不需要提取时间戳,也不需要生成水印。
        定义处理时间属性有两种方法:
            1、在数据流到表转换期间
                在架构定义期间,使用.proctime属性定义处理时间属性。time属性只能通过附加逻辑字段扩展物理架构。因此,只能在模式定义的末尾定义它。


            2、使用TableSource
                处理时间属性由实现DefinedProctimeAttribute接口的表源定义。逻辑时间属性被附加到由表源的返回类型定义的物理模式中。


四、事件时间
        事件时间允许表程序根据每个记录中包含的时间生成结果。这样即使在发生无序事件或延迟事件时也可以获得一致的结果。它还确保在从持久存储读取记录时表程序的可重放结果。
        此外,事件时间允许批处理和流式处理环境中表程序的统一语法。流式处理环境中的时间属性可以是批处理环境中记录的常规字段。
        为了处理无序事件并区分流媒体中的准时和迟到事件,Flink需要从事件中提取时间戳并在时间上取得某种进展(所谓的水印)。
        事件时间属性可以在数据流到表转换期间定义,也可以使用表源定义    
            1、在数据流到表转换期间
                在架构定义期间,使用.rowtime属性定义事件时间属性。必须在转换的数据流中分配时间戳和水印。
                在将数据流转换为表时,有两种定义时间属性的方法。取决于指定的.rowtime字段名是否存在于DataStream模式中,timestamp字段是:
                    作为新字段追加到架构
                    替换现有字段
                在这两种情况下,事件时间戳字段都将保存数据流事件时间戳的值
                


            2、使用TableSource
                事件时间属性由实现DefinedRowtimeAttributes接口的表源定义。getRowtimeAttributeDescriptors()方法返回一个RowtimeAttributeDescriptor列表,用于描述时间属性的最终名称、用于派生属性值的时间戳提取程序以及与该属性关联的水印策略。
                请确保getDataStream()方法返回的数据流与定义的时间属性对齐。只有在定义了StreamRecordTimestamp时间戳提取程序时,才考虑数据流的时间戳(由时间戳分配程序分配的时间戳)。只有定义了保留水印的水印策略,才能保留数据流的水印。否则,只有表源的rowtime属性的值是相关的。

参考文章:Time Attributes

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

springk

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值