维表是数仓中的一个概念,维表中的维度属性是观察数据的角度,在建设离线数仓的时候,通常是将维表与事实表进行关联构建星型模型。在实时数仓中,同样也有维表与事实表的概念,其中事实表通常
存储在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的条件必须包含所有主键的等值条件
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。