gpt4 book ai didi

apache-flink - Flink 中 Lookup 和 Processing Time Temporal join 有什么区别?

转载 作者:行者123 更新时间:2023-12-05 01:53:07 32 4
gpt4 key购买 nike

在我看来,Processing Time Temporal Join 用于流和外部数据库,并且始终根据连接条件join 外部数据库中的最新值。此外,Processing Time Temporal Join 用于外部表无法在 Flink 中将该表具体化为动态表的情况。

同样,Lookup Join用于流和外部数据库,总是根据连接条件查找外部数据库中的值。

Lookup Join会在Flink中具体化外部数据库表吗?它们之间有什么区别?

最佳答案

处理时间临时连接是两个流之间的连接,而查找连接是流和外部数据库之间的连接。

虽然Flink支持两种event time temporal join,一种是FOR SYSTEM_TIME AS OF语法,另一种是使用temporal table functions,但是只支持后一种基于table functions的方式进行处理时间时态连接。

处理时间时态连接与表示仅附加动态表的两个流一起工作——例如,

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

当使用处理时间属性(如上所示)执行此临时连接时,每个传入订单将与费率表/流中的最新值连接。 Orders 表/流将根本不会具体化,而 Rates 表/流将只保留每种货币最近使用的 Rate 版本。

与事件时间时间连接不同,处理时间时间连接不提供确定性结果。

相比之下,查找联接针对查找源(例如 JDBC 数据库)执行查询。默认情况下,Flink 中没有具体化任何内容,但一些查找源(例如 JDBC)提供了可选的缓存。

这些查找连接也不保证确定性结果,而是使用连接执行时可用的任何数据执行连接,这些数据来自缓存或查询。

临时连接和查找连接都不会更新它们的结果。您只需根据执行连接时运行时已知的内容获得尽力而为的结果。

为什么 Flink 费心提供处理时间临时连接?为什么不直接使用查找连接呢?两个原因:

  • 查找连接的成本更高——需要查询外部数据库并等待响应。是的,缓存是可能的,但是您可能会加入过时的数据。通过处理时间临时连接,您可以确保使用自动更新的相当新鲜的数据。

  • 查找联接需要实现特殊的连接器。时间连接使用标准的流连接器,因此它们更普遍可用。

关于apache-flink - Flink 中 Lookup 和 Processing Time Temporal join 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71209332/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com