ITPub博客

首页 > 大数据 > Hadoop > Flink SQL - 时间属性的介绍

Flink SQL - 时间属性的介绍

Hadoop 作者:元亨利贞 时间:2023-07-30 23:26:27 0 删除 编辑

介绍

在 Flink 的 Table API 和 SQL 中,基于时间的操作(例如时间窗口)需要定义相关的时间语义和时间数据来源信息。为了实现这一点,表中会提供一个逻辑上的时间字段,专门用来在表处理程序中指示时间。这个字段被称为时间属性(time attribute),它是每个表模式结构(schema)的一部分。

时间属性可以在创建表的 DDL 中直接定义为一个字段,也可以在 DataStream 转换成表时定义。一旦定义了时间属性,它就可以像普通字段一样被引用,并且可以在基于时间的操作中使用。时间属性的数据类型必须为  TIMESTAMP,它的行为类似于常规时间戳,可以直接访问并进行计算。

根据时间语义的不同,可以将时间属性定义分为事件时间(event time)和处理时间(processing time)两种情况。事件时间是指数据本身携带的时间戳,而处理时间是指数据到达 Flink 系统的时间。


用法

事件时间:

  在 Flink SQL 中,您可以在创建表的 DDL 语句中定义事件时间属性。这可以通过增加一个字段并使用 WATERMARK 语句来实现。例如,下面的代码片段展示了如何定义一个名为  EventTable  的表,其中  ts  字段被定义为事件时间属性,并基于  ts  设置了 5 秒的水位线延迟:

CREATE TABLE EventTable(
  user STRING,
  url STRING,
  ts TIMESTAMP(3),
  WATERMARK FOR ts AS ts - INTERVAL '5' SECOND
) WITH (
  ...
);

需要注意的是,时间戳类型必须是  TIMESTAMP  或者  TIMESTAMP_LTZ  类型。但是,如果时间戳是秒或者毫秒( BIGINT  类型),则可以通过转换来使用。例如,下面的代码片段展示了如何将  BIGINT  类型的时间戳转换为  TIMESTAMP_LTZ  类型

ts BIGINT,
time_ltz AS TO_TIMESTAMP_LTZ(ts, 3),

处理时间:

在 Flink SQL 中,您可以定义处理时间属性来表示数据到达 Flink 系统的时间。这可以通过在创建表的 DDL( CREATE TABLE  语句)中增加一个额外的字段,并通过调用系统内置的  PROCTIME()  函数来实现。例如,下面的代码片段展示了如何定义一个名为  EventTable  的表,其中  ts  字段被定义为处理时间属性:

CREATE TABLE EventTable(
  user STRING,
  url STRING,
  ts AS PROCTIME()
) WITH (
  ...
);

需要注意的是,在定义处理时间属性时,必须要额外声明一个字段,专门用来保存当前的处理时间。这个字段可以像普通字段一样被引用,并且可以在基于时间的操作中使用。


来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/70024433/viewspace-2967181/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2022-11-21

  • 博文量
    383
  • 访问量
    247980