Flink - Table API 动态表及时间语义

本文介绍了Flink中动态表的概念,强调其随时间变化的特性。动态表通过持续查询进行处理,产生新的动态表结果。流数据首先被转换为动态表,然后执行查询。时间特性在处理中至关重要,包括处理时间和事件时间的定义,它们影响着基于时间的操作如窗口计算。处理时间简单易用,而事件时间则需要考虑乱序事件,可以通过多种方式定义。
摘要由CSDN通过智能技术生成

动态表

  • 动态表是Flink对流数据的Table API 和 SQL支持的核心概念.

  • 与表示批处理数据的静态表不同,动态表是随时间变化的.

  • 持续查询

    • 动态表可以像静态的批处理表一样进行查询,查询一个动态表会产生持续查询(Continuous Query)
    • 连续查询永远不会停止,并会生成另一个动态表
    • 查询会不断更新其动态结果表,以反映其动态输入表上的更改

动态表和持续查询

在这里插入图片描述

  • 流式表查询的处理过程:
    1. 流被转换为动态表
    2. 对动态表计算连续查询,生成新的动态表
    3. 生成的动态表被转换回流

将流转换成动态表

  • 为了处理带有关系查询的流,必须先将其转换为表

  • 从概念上将,流的每个数据操作,都被解释为对结果表的查询(Insert)修改操作

在这里插入图片描述

持续查询

  • 持续查询会在动态表上做计算处理,并作为结果生成新的动态表

在这里插入图片描述

时间特性

  • 基于时间的操作(比如Table API和 SQL中窗口操作),需要定义相关的时间语义和时间数据来源的信息
  • Table 可以提供一个逻辑上的时间字段,用于在表处理程序中,指示时间和访问相应的时间戳
  • 时间属性,可以是每个表schema的一部分。一旦定义了时间属性,它就可以做为一个字段引用,并且可以在基于时间的操作中使用
  • 时间属性的行为类似于常规时间戳,可以访问,并且进行计算。

定义处理时间

  • 处理时间语义如下,允许表处理程序根据机器的本地时间生成结果。它是时间的最简单的概念。它既不需要提取时间戳,也不需要生成watermark

  • 由DataStream转换成表时指定

    • 在定义Schema期间。可以使用.proctime,指定字段名定义处理时间字段。
    • 这个proctime属性只能通过附加逻辑字段,来扩展物理schema。因此,在schema定义的末尾定义它。
    Table tempTable = tableEnv.fromDataStream(dataStream,"id, temp, timestamp, pt.proctime");
    
  • 定义处理时间(Processing Time)

    .withSchema(new Schema()
    	.field("id",DataTypes.STRING())
    	.field("timestamp",DataTypes.BIGINT())
    	.field("temp",DataTypes.DOUBLE()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值