我正在阅读 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
,完全困惑。
查找连接和时间连接使用相同的语法,但不是同一件事。查找联接需要支持查找的特殊源连接器,而使用 FOR SYSTEM TIME AS OF 语法的临时联接则使用任何标准流源。
查找连接使用事件时间或多或少有些棘手,并且社区选择不支持使用此语法的处理时间时间连接,因为这种行为可能会令人困惑。
为什么这两个操作使用相同的语法?嗯,这是表达临时连接的标准方式——Flink 并没有发明临时连接,这就是它们在 SQL 中的实现方式。从语义上讲,查找连接实际上与处理时时间连接相同。这是一次性连接,使用给定键的当前可用记录。
有关此主题的更多信息,请参阅 Flink 中的查找和处理时间临时连接之间有什么区别?。