flinksql如何关联mysql维表_Flink实战(八十三):flink-sql使用(十)维表join(五)Flink SQL之维表join之Temporal Table Join...

本文详细介绍了如何在Flink SQL中进行维表JOIN,特别是Temporal Table Join,以及如何创建Kafka和MySQL数据源表。讨论了计算列、水位线的定义,并给出了一例维表JOIN统计区域购买行为的完整流程。
摘要由CSDN通过智能技术生成

https://zhuanlan.zhihu.com/p/165962937?utm_source=qq

维表是数仓中的一个概念,维表中的维度属性是观察数据的角度,在建设离线数仓的时候,通常是将维表与事实表进行关联构建星型模型。在实时数仓中,同样也有维表与事实表的概念,其中事实表通常存储在kafka中,维表通常存储在外部设备中(比如MySQL,HBase)。对于每条流式数据,可以关联一个外部维表数据源,为实时计算提供数据关联查询。维表可能是会不断变化的,在维表JOIN时,需指明这条记录关联维表快照的时刻。需要注意是,目前Flink SQL的维表JOIN仅支持对当前时刻维表快照的关联(处理时间语义),而不支持事实表rowtime所对应的的维表快照(事件时间语义)。通过本文你可以了解到:

如何使用Flink SQL创建表

如何定义Kafka数据源表

如何定义MySQL数据源表

什么是Temporal Table Join

维表join的案例

Flink SQL创建表

注意:本文的所有操作都是在Flink SQL cli中进行的

创建表的语法

CREATE TABLE [catalog_name.][db_name.]table_name

(

{ | }[, ...n]

[])[COMMENT table_comment]

[PARTITIONED BY (partition_column_name1, partition_column_name2, ...)]

WITH (key1=val1, key2=val2, ...)--定义表字段

:

column_name column_type[COMMENT column_comment]

--定义计算列

:

column_nameAS computed_column_expression [COMMENT column_comment]

--定义水位线

:

WATERMARKFOR rowtime_column_name AS watermark_strategy_expression

解释

COMPUTED COLUMN(计算列)

计算列是一个通过column_name AS computed_column_expression生成的虚拟列,产生的计算列不是物理存储在数据源表中。一个计算列可以通过原有数据源表中的某个字段、运算符及内置函数生成。比如,定义一个消费金额的计算列(cost),可以使用表的价格(price)*数量(quantity)计算得到。

计算列常常被用在定义时间属性(见另一篇文章Flink Table API&SQL编程指南之时间属性(3),可以通过PROCTIME()函数定义处理时间属性,语法为proc AS PROCTIME()。除此之外,计算列可以被用作提取事件时间列,因为原始的事件时间可能不是TIMESTAMP(3)类型或者是存在JSON串中。

尖叫提示:1.在源表上定义计算列,是在读取数据源之后计算的,计算列需要跟在SELECT查询语句之后;2.计算列不能被INSERT语句插入数据,在INSERT语句中,只能包括实际的目标表的schema,不能包括计算列

水位线

水位线定义了表的事件时间属性,其语法为:

WATERMARK FOR rowtime_column_name AS watermark_strategy_expression

其中rowtime_column_name表示表中已经存在的事件时间字段,值得注意的是,该事件时间字段必须是TIMESTAMP(3)类型,即形如yyyy-MM-dd HH:mm:ss,如果不是这种形式的数据类型,需要通过定义计算列进行转换。

watermark_strategy_expression定义了水位线生成的策略,该表达式的返回数据类型必须是

TIMESTAMP(3)类型。

Flink提供了许多常用的水位线生成策略:

严格单调递增的水位线:语法为

WATERMARK FOR rowtime_column AS rowtime_column

即直接使用时间时间戳作为水位线

递增水位线:语法为

WATERMARK FOR rowtime_column AS rowtime_column -

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值