微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

|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的条件必须包含所有主键的等值条件

 

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐