flink车联网项目前篇:数据开发(第66天)

devtools/2024/10/19 13:33:37/

系列文章目录

03_数据仓库开发

  1. 开发规范
    1.1 数据库划分规范
    1.2 表命名规范
    1.3 表字段类型规范
  2. 开发前准备
    3.1 业务系统表
    3.2 数据导入
    04_维度主题
  3. 相关表结构
    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 -乘客维度信息表
  4. 设计思路

文章目录

  • 系列文章目录
  • 前言
  • 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 表字段类型规范

  1. 数量类型为bigint
  2. 金额类型为decimal,例decimal(20, 2),表示:20位有效数字,其中小数部分2位
  3. 字符串(名字,描述信息等)类型为string
  4. 日期类型为string
    时间类型为datetime
  1. 开发步骤
    因为维表和源表是共用的,所以先开发维表,然后开发源表;
    然后开发订单域的订单主题(实时),动态调价主题(实时),推荐上车点主题(离线);
    然后开发司机主题(离线)、乘客主题(离线)、投诉申诉主题(离线);
    最后开发日志流处理。

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 表示增量分区表。


http://www.ppmy.cn/devtools/95057.html

相关文章

豆瓣电影排行榜数据爬取

爬虫流程 确定需求 标题,图片链接,评分找到数据所在链接 [https://movie.douban.com/chart?t1477886984558](https://movie.douban.com/chart?t1477886984558) 构造请求头向服务器发送请求 添加UA解析数据 使用bs4进行解析数据存储数据 可以把数…

【GitHub】github clone远程仓库的时候一直失败

git clone https://github.com/coderwhy/hy-react-web-music.git 正克隆到 hy-react-web-music... fatal: unable to access https://github.com/coderwhy/hy-react-web-music.git/: Failed to connect to github.com port 443 after 75011 ms: Couldnt connect to servergit c…

《机器学习》 KNN算法、数据可视化 No.1

一、了解机器学习 1、什么是机器学习 机器学习是一种人工智能(AI)的分支,旨在让计算机通过数据自动学习和改进。机器学习算法被设计用于从数据中提取模式和规律,然后利用这些模式和规律来做出预测或做出决策,而无需明…

c语言学习,malloc()函数分析

1:malloc() 函数说明: 申请配置size大小内存空间 2:函数原型: void *malloc(size_t size) 3:函数参数: 参数size,为申请内存大小 4:返回值: 配置成功则返回指针&#…

《将进酒》的享乐主义

《将进酒》是唐代诗人李白的代表作之一,以豪放奔放的词句和激昂慷慨的情感赢得了广泛的赞誉。这首诗写的是饮酒壮志未酬的诗人,通过酒来寄托自己对人生与理想的追求和失落,表达出了一种豪情壮志与不甘心命运的矛盾心理。全诗共有十九句&#…

数据结构之AVL树

找往期文章包括但不限于本期文章中不懂的知识点: 个人主页:我要学编程(ಥ_ಥ)-CSDN博客 所属专栏:数据结构(Java版) 二叉搜索树的学习 我们在这篇文章中学习了二叉搜索树,知道了当插入的元素序列趋于有序时…

【Kubernetes】身份认证与鉴权

一,认证 所有 Kubernetes 集群有两类用户:由Kubernetes管理的ServiceAccounts(服务账户)和(Users Accounts)普通账户。 两种账户的区别: 普通帐户是针对(人)用户的,服务账户针对Pod进程普通帐户是全局性。在集群所有namespaces…

力扣题/二叉树/二叉树中的最大路径和

二叉树中的最大路径和 力扣原题 二叉树中的 路径 被定义为一条节点序列,序列中每对相邻节点之间都存在一条边。同一个节点在一条路径序列中 至多出现一次 。该路径 至少包含一个 节点,且不一定经过根节点。路径和 是路径中各节点值的总和。给你一个二叉树…