实时数仓-涉及维度退化的事实表

[关键字]:Flink SQL、Flink 双流Join、Flink 动态表与持续查询

业务背景

实现DWD-加购事务事实表

业务流程

实时数仓-涉及维度退化的事实表_第1张图片

维度退化

何为维度退化

传关系型数据库
严格遵循三范式来 表内没有冗余 如果要获取维度字段需要联结其他表 ==> 时间换空间
非关系型数据库
遵循维度建模且数据量大 联结其他表会大大增加查询时间 所以将需要的维度字段合并到事务表 ==>空间换时间

宽表

宽窄表并不单单以表的宽细作为划分依据,而取决于表中是否有冗余字段
维度退化后,事务表不再符合三范式的规定 自然就是宽表

技术选型解析

DataStream vs Table

DataStream:没有封装好的API 需要重写编写Join
Table:有现成的Join API以供调用
参考:https://zhuanlan.zhihu.com/p/457325153

Flink CDC vs Lookup join

使用FlinkCDC会造成数据重复join的问题 所以选择使用Lookup连接器来生成表

Lookup Join 通常在 Flink SQL 表和外部系统查询结果关联时使用。
这种关联要求一张表(主表)有处理时间字段,而另一张表(维表)由 Lookup 连接器生成。
Lookup Join 做的是维度关联,而维度数据是有时效性的,那么我们就需要一个时间字段来对数据的版本进行标识。
因此,Flink 要求我们提供处理时间用作版本字段。
此处选择调用 PROCTIME() 函数获取系统时间,将其作为处理时间字段。

Kafka Connector vs Upsert Kafka Connector

选哪个作为连接器的判断标准:表的操作类型是否仅为Insert

Kafka Connector Upsert Kafka Connector
要求表不能有主键 要求表有主键
不能消费带有 Upsert/Delete 操作类型数据的表,如 left join 生成的动态表 支持以 upsert 方式从 Kafka topic 中读写数据

实时数仓-涉及维度退化的事实表_第2张图片

你可能感兴趣的:(大数据,Flink,kafka,big,data,数据库)