Dil*_*aba 4 apache-flink flink-streaming flink-sql
在我看来,Processing Time Temporal Join用于流和外部数据库,并且始终join根据连接条件获取外部数据库中的最新值。另外,Processing Time Temporal Join当the external table is not feasible to materialize the table as a dynamic table within Flink.
类似地,Lookup Join用于流和外部数据库,并且始终是look up基于连接条件的外部数据库中的值。
Flink中会Lookup Join具体化外部数据库表吗?他们之间有什么区别?
处理时临时连接是两个流之间的连接,而查找连接是流与外部数据库之间的连接。
虽然 Flink 支持两种类型的事件时间临时连接,一种使用FOR SYSTEM_TIME AS OF语法,另一种使用时态表函数,但仅支持后一种基于表函数的方法来处理时间临时连接。
处理时间临时连接与表示仅附加动态表的两个流一起使用 - 例如,
SELECT
o_amount, r_rate
FROM
Orders,
LATERAL TABLE (Rates(o_proctime))
WHERE
r_currency = o_currency
Run Code Online (Sandbox Code Playgroud)
当使用处理时间属性执行此临时连接时(如上所示),每个传入订单将与费率表/流中的最新值连接。订单表/流根本不会具体化,而费率表/流将仅保留每种货币最近消耗的费率版本。
与事件时间临时连接不同,处理时间临时连接不提供确定性结果。
相比之下,查找联接针对查找源(例如 JDBC 数据库)执行查询。默认情况下,Flink 中不会具体化任何内容,但某些查找源(例如 JDBC)提供可选的缓存。
这些查找联接也不保证确定性结果,而是使用执行联接时可用的任何数据来执行联接,该数据来自缓存或查询。
时间连接和查找连接都不会更新其结果。您只需根据执行联接时运行时已知的信息获得尽力而为的结果。
为什么 Flink 费心提供处理时间临时连接?为什么不直接使用查找连接呢?两个原因:
查找连接的成本更高——需要查询外部数据库并等待响应。是的,缓存是一种可能性,但随后您可能会加入过时的数据。通过处理时间临时连接,您可以确保使用自动更新的相当新鲜的数据。
查找连接需要实现特殊的连接器。时间连接使用标准流连接器,因此它们更通用。
| 归档时间: |
|
| 查看次数: |
981 次 |
| 最近记录: |