Processing Time Temporal Join 是否支持 FOR SYSTEM_TIME AS OF 语法

问题描述 投票:0回答:1

我正在阅读 Flink 1.20 文档 https://nightlies.apache.org/flink/flink-docs-release-1.20/docs/dev/table/sql/queries/joins/#processing-time-temporal-join

据说目前不支持使用`FOR SYSTEM_TIME AS OF 语法进行处理时间临时连接,应该使用 LATERAL TABLE 进行临时连接

目前,FOR SYSTEM_TIME AS OF 语法用于临时连接 尚不支持任何视图/表的最新版本,您可以使用 时态表函数语法如下:

SELECT
  o_amount, r_rate
FROM
  Orders,
  LATERAL TABLE (Rates(o_proctime))
WHERE
  r_currency = o_currency
 

但是,在查找连接部分(https://nightlies.apache.org/flink/flink-docs-release-1.20/docs/dev/table/sql/queries/joins/#lookup-join),它正在使用 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;

在上面,处理时间时间连接说它不支持

FOR SYSTEM_TIME AS OF syntax used in temporal join
,而在查找连接部分它使用的是处理时间时间连接语法?

所以,是否支持

FOR SYSTEM_TIME AS OF syntax used in temporal join
,完全困惑。

apache-flink
1个回答
0
投票

查找连接和时间连接使用相同的语法,但不是同一件事。查找联接需要支持查找的特殊源连接器,而使用 FOR SYSTEM TIME AS OF 语法的临时联接则使用任何标准流源。

查找连接使用事件时间或多或少有些棘手,并且社区选择不支持使用此语法的处理时间时间连接,因为这种行为可能会令人困惑。

为什么这两个操作使用相同的语法?嗯,这是表达临时连接的标准方式——Flink 并没有发明临时连接,这就是它们在 SQL 中的实现方式。从语义上讲,查找连接实际上与处理时时间连接相同。这是一次性连接,使用给定键的当前可用记录。

有关此主题的更多信息,请参阅 Flink 中的查找和处理时间临时连接之间有什么区别?

© www.soinside.com 2019 - 2024. All rights reserved.