|Flink SQL之维表JOIN
作者:互联网
维表是数仓中的一个概念,维表中的维度属性是观察数据的角度,在建设离线数仓的时候,通常是将维表与事实表进行关联构建星型模型。在实时数仓中,同样也有维表与事实表的概念,其中事实表通常
存储在kafka中,维表通常存储在外部设备中(比如MySQL,HBase)。对于每条流式数据,可以关联一个外部维表数据源,为实时计算提供数据关联查询。维表可能是会不断变化的,在维表JOIN时,需指明这
条记录关联维表快照的时刻。需要注意是,目前Flink SQL的维表JOIN仅支持对当前时刻维表快照的关联(处理时间语义),而不支持事实表rowtime所对应的的维表快照(事件时间语义)。
本篇博客参考:https://www.cnblogs.com/jmx-bigdata/p/13708845.html
官方文档地址:https://ci.apache.org/projects/flink/flink-docs-release-1.9/dev/table/sql.html#ddl
(一)Temporal Table Join语法规则
SELECT column-names FROM table1 [AS <alias1>] [LEFT] JOIN table2 FOR SYSTEM_TIME AS OF table1.proctime [AS <alias2>] ON table1.column-name1 = table2.key-name1
注意:目前,仅支持INNER JOIN与LEFT JOIN。在join的时候需要使用 FOR SYSTEM_TIME AS OF
,其中table1.proctime表示table1的proctime处理时间属性(计算列)。使用FOR SYSTEM_TIME AS OF table1.proctime
表示
当左边表的记录与右边的维表join时,只匹配当前处理时间维表所对应的的快照数据。
使用说明
- 仅支持Blink planner
- 仅支持SQL,目前不支持Table API
- 目前不支持基于事件时间(event time)的temporal table join
- 维表可能会不断变化,JOIN行为发生后,维表中的数据发生了变化(新增、更新或删除),则已关联的维表数据不会被同步变化
- 维表和维表不能进行JOIN
- 维表必须指定主键。维表JOIN时,ON的条件必须包含所有主键的等值条件
标签:table1,JOIN,Flink,关联,proctime,之维表,维表,快照 来源: https://www.cnblogs.com/sjfxwj/p/14244443.html