You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flink 1.20处理时间时态Join是否支持FOR SYSTEM_TIME AS OF语法?

处理时间时态Join与Lookup Join的语法差异说明

Flink 1.20中文档的差异源于两种不同的处理时间关联场景,并非内容矛盾:

  1. 版本化维度表的处理时间时态Join
    这是「处理时间时态Join」章节描述的场景:当关联的是维护了版本历史的维度表(比如记录汇率随时间变化的Rates表),此时确实不支持FOR SYSTEM_TIME AS OF语法,必须通过LATERAL TABLE调用表函数的方式,获取指定处理时间点的表版本,示例代码如下:

    SELECT
      o_amount, r_rate
    FROM
      Orders,
      LATERAL TABLE (Rates(o_proctime))
    WHERE
      r_currency = o_currency
    
  2. Lookup Join(关联外部静态/准静态数据源)
    这是「Lookup Join」章节的场景:当关联的是外部系统的静态或准静态数据源(比如通过JDBC连接的MySQL客户表),此时支持FOR SYSTEM_TIME AS OF语法,用来基于流数据的处理时间,实时查询外部数据源的最新数据,示例代码是合法的:

    -- Customers is backed by the JDBC connector and can be used for lookup joins
    CREATE TEMPORARY TABLE Customers (
      id INT,
      name STRING,
      country STRING,
      zip STRING
    ) WITH (
      'connector' = 'jdbc',
      'url' = 'jdbc:mysql://mysqlhost:3306/customerdb',
      'table-name' = 'customers'
    );
    
    -- enrich each order with customer information
    SELECT o.order_id, o.total, c.country, c.zip
    FROM Orders AS o
      JOIN Customers FOR SYSTEM_TIME AS OF o.proc_time AS c
        ON o.customer_id = c.id;
    

总结

  • 若关联带版本历史的维度表:只能使用LATERAL TABLE方式
  • 若关联外部静态/准静态数据源(Lookup场景):支持FOR SYSTEM_TIME AS OF语法

两者都属于处理时间维度的关联,但数据源类型和底层实现逻辑不同,因此文档会有不同的语法要求。

内容的提问来源于stack exchange,提问作者Tom

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 22:45:55