维表 Join
更新时间: 2021-08-27 16:29:37
阅读 1286
维表 Join
维表是指一张数据不断变化的表,对应到实时计算上的具体需求是:用户需要在流计算过程中进行流数据和外部存储维表数据的 JOIN,从而得到完整的输出数据。这里会涉及到维表的快照的概念,即:在 JOIN 的瞬间只会对维表当前时间数据做关联。
随着用户对实时数据维表 JOIN 需求的激增,我们在实时数仓版本中提供了功能更丰富,易用性更强的维表 JOIN,旨在让用户使用起来更便捷,更顺手。
维表 JION 的使用
目前提供了三种存储的维表 JOIN 功能:
维表 JOIN 的 SQL 语句分为两部分:SET 语句和 JOIN 语句。
1. SET 语句
SET 语句是用来规定维表 JOIN 过程中本地缓存的设置,是可选项。本地缓存的作用是将每一次查询到的维表数据缓存在本地,当下一次数据查询的时候会优先查询本地缓存是否存在已有数据,如果有则立即返回。如果没有才会去外部存储维表查询数据,本地缓存会根据用户设置的过期时间定时过期数据。
本地缓存的优点是:数据返回速度快,减少了去外部存储查询的开销。当然缺点也相对明显:缓存数据更新不及时,会产生错误的返回结果,这点对于增量索引的用户来说尤为致命。所以用户要根据维表的具体特点决定是否使用 SET 语句进行本地缓存的设置。
SET 语法写法如下:
— 可选设置项 —
SET '<dim_table_name>.connector.lookup.cache.max-rows' = [number_value];
//开启本地缓存并设置缓存的维表数据最大个数,在缓存没有过期之前,join的数据会先从本地缓存取出
SET '<dim_table_name>.connector.lookup.cache.ttl' = [number_value];
//设置本地缓存数据的过期时间,单位ms
注:增量索引任务一定不要设置本地缓存,会导致 JOIN 老数据。
例子:
SET 'Music_Mlog.connector.lookup.cache.max-rows' = 10000;
SET 'Music_Mlog.connector.lookup.cache.ttl' = 120000;
这里规定维表 JOIN 的时候,从 Music_Mlog 表中查询并缓存到本地的数据最大不超过10000个,缓存过期时间为120s。
2.JOIN语句
不同存储的维表 JOIN 语句会有不同,具体写法会在下面篇章分别进行介绍。
文档反馈
以上内容对您是否有帮助?