Flink CDC下那个for是必须在o表里有这么一个ptime字段吗?

Flink CDC下那个for system_time as of o.ptime。是必须在o表里有这么一个ptime字段吗?我业务表里没有这种时间字段,是要在flinkSQL的建表语句里建一个虚拟的字段?就单独为了这个地方用一下?好像没有实际业务意义。

展开
收起
十一0204 2023-07-26 08:23:29 172 分享 版权
3 条回答
写回答
取消 提交回答
  • 在 Flink CDC 中使用 FOR SYSTEM_TIME AS OF 子句时,确实需要在源表中有一个表示时间的列(如 ptime)来支持历史查询。这个时间列是必需的,因为它用于确定在特定时间点或时间范围内数据的状态。

    在一些业务表中可能没有这样的时间字段,特别是对于没有明确的时间概念的静态维度表。在这种情况下,你可以考虑在 Flink SQL 的建表语句中添加一个虚拟的时间字段,该字段不具有实际业务意义,仅用于支持 FOR SYSTEM_TIME AS OF 子句的使用。

    示例建表语句:

    CREATE TABLE o (
      id INT,
      name STRING,
      ptime TIMESTAMP(3),
      -- 其他字段...
    ) WITH (
      ...
    );
    

    请注意,在使用 FOR SYSTEM_TIME AS OF 子句时,要根据实际情况指定合适的时间点或时间范围。如果你不需要历史查询功能,那么可以不使用该子句。

    总结起来,当使用 FOR SYSTEM_TIME AS OF 子句时,需要在源表中有一个时间字段,可以通过在 Flink SQL 的建表语句中创建一个虚拟时间字段来进行处理。这样做并无实际业务意义,只是为了支持历史查询功能。

    2023-07-31 22:40:22
    赞同 展开评论
  • 北京阿里云ACE会长

    在 Flink CDC 中,如果您使用了 CDC 转换器中的 for 语句,需要确保您的源表或目标表中存在一个名为 ptime 的字段。for 语句的作用是在目标表的每一行中添加一个名为 ptime 的字段,并将该字段的值设置为当前时间戳。
    具体来说,for 语句的语法如下:
    Copy
    for appender with ptime as now()
    在上述语句中,ptime 是要添加的字段名,now() 是一个内置函数,用于获取当前的时间戳。
    需要注意的是,for 语句只适用于 CDC 转换器中的 appender 操作,即将数据追加到目标表中。如果您使用了 CDC 转换器中的 upsert 或 sink 操作,不需要在目标表中添加 ptime 字段。
    如果您的源表或目标表中

    2023-07-29 15:44:09
    赞同 展开评论
  • 意中人就是我呀!

    1,这个字段你可以在ddl的时候定义,PROCTIME() as proc_time。此回答整理至钉群“Flink CDC 社区”。

    2023-07-26 12:15:39
    赞同 展开评论

实时计算Flink版是阿里云提供的全托管Serverless Flink云服务,基于 Apache Flink 构建的企业级、高性能实时大数据处理系统。提供全托管版 Flink 集群和引擎,提高作业开发运维效率。

还有其他疑问?
咨询AI助理