系列文章目录
03_数据仓库开发
- 开发规范
1.1 数据库划分规范
1.2 表命名规范
1.3 表字段类型规范 - 开发前准备
3.1 业务系统表
3.2 数据导入
04_维度主题 - 相关表结构
1.1 dim_area - 城市字典表
1.2 dim_car_info - 车辆信息表
1.3 dim_car_vendor - 车队信息表
1.4 dim_date_work_type -节假日期类型表
1.5 dim_driver_info - 司机信息
1.6 dim_user_info -乘客维度信息表 - 设计思路
文章目录
- 系列文章目录
- 前言
- 03_数据仓库开发
- 1. 开发规范
- 1.1 数据库划分规范
- 1.2 表命名规范
- 1.3 表字段类型规范
- 3. 开发前准备
- 3.1 业务系统表
- 3.2 数据导入
- 04_维度主题
- 1. 相关表结构
- 1.1 dim_area - 城市字典表
- 1.2 dim_car_info - 车辆信息表
- 1.3 dim_car_vendor - 车队信息表
- 1.4 dim_date_work_type -节假日期类型表
- 1.5 dim_driver_info - 司机信息
- 1.6 dim_user_info -乘客维度信息表
- 2. 设计思路
前言
本文为flink车联网项目前期准备:数据仓库开发。由于篇幅过长,后续章节:业务实现
03_数据仓库开发
1. 开发规范
1.1 数据库划分规范
MySQL:dim/order/driver
VVP:
mysql:用于存放 flink 的 mysql 映射表信息
dw:用于存放 flink 的 Kafka 映射表信息
redis:用于存放 flink 的 redis 表映射信息
starrocks:用于存放 flink 的 starrocks表映射信息
Paimon:
ods:用于存放 ods 表信息及数据
dwd:用于存放 dwd 表信息及数据
dws:用于存放 dws 表信息及数据
ads:用于存放 ads 表信息及数据
dim:用于存放 dim 相关的表信息及数据
StarRocks:ads、dws
1.2 表命名规范
命名规则:介质_分层_表含义
介质:
mysql:mysql 映射表
paimon:paimon 表
kafka:kafka 映射表
mc:maxcompute 表
sr:starrocks 映射表
redis: redis映射表
分层:
ods
dwd
dws
ads
表含义:
示例:order_info_all 订单信息总表
1.3 表字段类型规范
- 数量类型为bigint
- 金额类型为decimal,例decimal(20, 2),表示:20位有效数字,其中小数部分2位
- 字符串(名字,描述信息等)类型为string
- 日期类型为string
时间类型为datetime
- 开发步骤
因为维表和源表是共用的,所以先开发维表,然后开发源表;
然后开发订单域的订单主题(实时),动态调价主题(实时),推荐上车点主题(离线);
然后开发司机主题(离线)、乘客主题(离线)、投诉申诉主题(离线);
最后开发日志流处理。
3. 开发前准备
3.1 业务系统表
我们一共有有23张表,其中dim库6张,order库10张,driver库7张。
3.2 数据导入
打开mysql 客户端,运行4、load.sql脚本。
source /export/data/mysql/4、load.sql
注意,每次运行这个脚本都会将历史数据更新到前31天的数据。如果需要将数据进行更新,则运行这个脚本即可。
04_维度主题
维度主题属于公共域,其实就是开发项目中用到的维度表。
1. 相关表结构
1.1 dim_area - 城市字典表
1.2 dim_car_info - 车辆信息表
1.3 dim_car_vendor - 车队信息表
1.4 dim_date_work_type -节假日期类型表
1.5 dim_driver_info - 司机信息
1.6 dim_user_info -乘客维度信息表
2. 设计思路
因为维度表在实时任务和离线任务中都会用到,所以最好使用同一份数据,一方面避免重复开发,降低开发成本,另一方面可以做到数据的一致性。
考虑到维度表的变化相对事实表来说比较缓慢,所以没有必要追求毫秒级更新,做到亚秒级更新即可。所以这里可以采用的技术方案就可以省掉Kafka,直接通过Flink CDC读取mysql数据,然后写入到Paimon表中,因为Paimon表支持增删改查,所以就对应最新的数据。如果维表加工时需要关联,流式读取Paimon表进行双流Join即可,这样就可以做到数据的亚秒级更新。
另外,因为维度是变化的,为了保存这种变化信息,需要将数据进行快照保存,也就是每天将当日的维度信息导入到分区表中,这样在查询历史数据时就可以跟对应日期的数据进行关联,取到正确的数据。当然,如果数据不会变化,则不用同步到MaxCompute,如时间维度表。
因为分区表的使用场景主要是离线关联,为了方便数据的存和取,这里直接使用MaxCompute作为存储介质。
具体表的数据流转图如下:
以dim_area为例展示如下:
项目中主要使用阿里云flink自带的catalog来管理flink的元数据,即vvp。对于paimon表,为了方便表的创建和管理,使用单独的paimon catalog,并为了和MaxCompute整合,将元数据保存到MaxCompute中一份。
MySQL注册表通过Flink SQL进行关联、转换等操作后插入到Paimon表中;Paimon表整合了MaxCompute,所以在MaxCompute中也可以进行查询;最后为了对维度数据进行快照备份,创建了 MaxCompute 分区表,表名后缀 table_i 。
注意:
表名后缀中 _f 表示全量表,_i 表示增量分区表。