1、数据仓库概念
数据仓库(Data Warehouse),是为企业制定决策,提供数据支持的。可以帮助企业改进业务流程、提高产品质量等。
数据仓库的输入数据通常包括:业务数据、用户行为数据(日志数据)和爬虫数据等。本项目仅对业务数据进行统计。
业务数据:就是各行业在处理事务过程中产生的数据。比如用户在电商网站中登录、下单、支付等过程中,需要和网站后台数据库进行增删改查交互,产生的数据就是业务数据。业务数据通常存储在MySQL、Oracle等数据库中。
2、项目需求和架构
2.1、项目需求分析
本项目仅对业务数据分析处理。
一、项目需求
1、业务数据采集平台搭建
2、数据仓库维度建模
3、分析,运单、线路、卡车、司机、快递等物流核心主题,统计上百个报表指标。
4、采用即席查询工具,随时进行指标分析
5、对集群性能进行监控,发生异常需要报警。
6、元数据管理
7、质量监控
8、权限管理
2.2、项目框架
2.2.1、项目选型
技术选型主要考虑因素:数据量大小、业务需求、行业内经验、技术成熟度、开发维护成本、总成本预算
- 数据采集传输: Flume,Kafka,DataX,Flink-CDC,Sqoop,Maxwell,Logstash
- 数据存储: MySOL,HDFS,HBase,Redis,MongoDB
- 数据计算: Hive, Spark,Tez,Flink,Storm
- 数据查询: Presto,Kylin,Impala,Druid,ClickHouse,Doris
- 数据可视化: Superset,Echarts,QuickBI,DataV
- 任务调度: DolphinScheduler,Azkaban, Oozie,Airflow
- 集群监控: Zabbix,Prometheus
- 元数据管理: Atlas
- 权限管理: Ranger,Sentry
2.2.2、系统数据流程设计
2.2.3、框架版本选型
选择Apache框架
注意事项: 框架选型尽量不要选择最新的框架,选择最新框架半年前左右的稳定版。
3、物流系统业务简介
3.1、物流系统业务流程
以用户下单寄件为例对业务流程进行说明。用户下单并支付完成后,快递员上门取件,而后提及到转运站。物流管理系统规划路线,生成运输任务。接下来分拣员分拣,将快递分派到指定运输班次。运输任务启动,每五分钟更新进度,经过若干转运中心、转运站(中间每个环节都要经历入站、分拣、出站三个环节),到达目标转运站(运输路线的最后一个转运站),由派件快递员领件,派送至收件方,后者签收,运单完成。
此外,转运中心是市级的,转运站是区(县)级的,转运中心每天有八个发车班次,转运站每天有四个发车班次,转运中心互通,转运站不互通。
3.2、物流系统表结构
以下为当前物流系统涉及到的业务数据表结构关系。这27张表以运单表、用户表等,用户表提供用户的详细信息,支付表提供该运单的支付详情,运单详情表提供运单的课程等情况。本次讲解以此27个表为例,实际项目中,业务数据库中表格远远不止这些。
3.2.1 城际公路里程表(a_template_city_distance)
字段名 | 字段说明 |
id | 编号(主键) |
city_no1 | 城市1编号 |
city_no2 | 城市2编号 |
distance | 距离(单位:km) |
remark | 城市名称(城市1名称 + 城市2名称) |
3.2.2 小区表(base_complex)
字段名 | 字段说明 |
id | 编号(主键) |
complex_name | 小区名称 |
province_id | 省份ID |
city_id | 城市ID |
district_id | 区(县)ID |
district_name | 区(县)名称 |
create_time | 创建时间 |
update_time | 更新时间 |
is_deleted | 是否删除 |
3.2.3 字典表(base_dic)
字段名 | 字段说明 |
id | 编号(主键) |
parent_id | 父级编号 |
name | 名称 |
dict_code | 编码 |
create_time | 创建时间 |
update_time | 更新时间 |
is_deleted | 是否删除 |
3.2.4 机构表(base_organ)
字段名 | 字段说明 |
id | 编号(主键) |
org_name | 机构名称 |
org_level | 机构等级(1为转运中心,2为转运站) |
region_id | 地区ID,1级机构为city,2级机构为district |
org_parent_id | 父级机构ID |
points | 多边形经纬度坐标集合 |
create_time | 创建时间 |
update_time | 更新时间 |
is_deleted | 是否删除 |
3.2.5 地区表(base_region_info)
字段名 | 字段说明 |
id | 编号(主键) |
parent_id | 父级地区ID |
name | 地区名称 |
dict_code | 编码(行政级别) |
short_name | 简称 |
create_time | 创建时间 |
update_time | 更新时间 |
is_deleted | 是否删除 |
3.2.6 员工表(employee_info)
字段名 | 字段说明 |
id | 编号(主键) |
username | 用户名 |
password | 密码 |
real_name | 真实姓名 |
id_card | 身份证号 |
phone | 手机号 |
birthday | 生日 |
gender | 性别 |
address | 地址 |
employment_date | 入职日期 |
graduation_date | 毕业日期 |
education | 学历 |
position_type | 岗位类别 |
create_time | 创建时间 |
update_time | 更新时间 |
is_deleted | 是否删除 |
3.2.7 快递员信息表(express_courier)
字段名 | 字段说明 |
id | 编号(主键) |
emp_id | 员工ID |
org_id | 所属机构ID |
working_phone | 工作电话 |
express_type | 快递员类型(收货;发货) |
create_time | 创建时间 |
update_time | 更新时间 |
is_deleted | 是否删除 |
3.2.8 快递员小区关系表(express_courier_complex)
字段名 | 字段说明 |
id | 编号(主键) |
courier_emp_id | 快递员员工编号 |
complex_id | 小区编号 |
create_time | 创建时间 |
update_time | 更新时间 |
is_deleted | 是否删除 |
3.2.9 快递员取件任务表(express_task_collect)
字段名 | 字段说明 |
id | 编号(主键) |
order_id | 运单ID |
status | 状态 |
org_id | 机构编号 |
org_name | 机构名称 |
courier_emp_id | 快递员员工编号 |
courier_name | 快递员姓名 |
estimated_collected_time | 预计揽收时间 |
estimated_commit_time | 预计提交时间 |
actual_collected_time | 实际揽收时间 |
actual_commit_time | 实际提交时间 |
cancel_time | 取消时间 |
remark | 备注 |
create_time | 创建时间 |
update_time | 更新时间 |
is_deleted | 是否删除 |
3.2.10 快递员派件任务表(express_task_delivery)
字段名 | 字段说明 |
id | 编号(主键) |
order_id | 运单ID |
status | 任务状态 |
org_id | 机构ID |
org_name | 机构名称 |
courier_emp_id | 快递员员工编号 |
courier_name | 快递员姓名 |
estimated_end_time | 预估完成时间 |
start_delivery_time | 实际开始时间 |
delivered_time | 实际完成时间 |
is_rejected | 是否拒收运货 |
create_time | 创建时间 |
update_time | 更新时间 |
is_deleted | 是否删除 |
3.2.11 运输线路表(line_base_info)
字段名 | 字段说明 |
id | 编号(主键) |
name | 线路名称 |
line_no | 线路编号 |
line_level | 线路级别 |
org_id | 所属机构 |
transport_line_type_id | 线路类型 |
start_org_id | 起始机构id |
start_org_name | 起始机构名称 |
end_org_id | 目标机构id |
end_org_name | 目标机构名称 |
pair_line_id | 配对线路ID |
distance | 直线距离 |
cost | 公路里程 |
estimated_time | 预计时间(分钟) |
status | 状态 0:禁用 1:正常 |
create_time | 创建时间 |
update_time | 更新时间 |
is_deleted | 是否删除 |
3.2.12 班次表(line_base_shift)
字段名 | 字段说明 |
id | 编号(主键) |
line_id | 线路id |
start_time | 班次开始时间 |
est_end_time | 预估到达时间 |
driver1_emp_id | 第一司机 |
driver2_emp_id | 第二司机 |
truck_id | 卡车 |
pair_shift_id | 配对班次(同一辆车一去一回的另一班次) |
is_enabled | 状态 0:禁用 1:正常 |
create_time | 创建时间 |
update_time | 更新时间 |
is_deleted | 是否删除 |
3.2.13 运单明细表(order_cargo)
字段名 | 字段说明 |
id | 编号(主键) |
order_id | 运单id |
cargo_type | 货物类型 |
volumn_length | 长cm |
volumn_width | 宽cm |
volumn_height | 高cm |
weight | 重量 kg |
remark | 备注 |
create_time | 创建时间 |
update_time | 更新时间 |
is_deleted | 是否删除 |
3.2.14 运单表(order_info)
字段名 | 字段说明 |
id | 编号(主键) |
order_no | 运单号 |
status | 运单状态 |
collect_type | 取件类型,1为网点自寄,2为上门取件 |
user_id | 客户id |
receiver_complex_id | 收件人小区id |
receiver_province_id | 收件人省份id |
receiver_city_id | 收件人城市id |
receiver_district_id | 收件人区县id |
receiver_address | 收件人详细地址 |
receiver_name | 收件人姓名 |
receiver_phone | 收件人电话 |
receive_location | 起始点经纬度 |
sender_complex_id | 发件人小区id |
sender_province_id | 发件人省份id |
sender_city_id | 发件人城市id |
sender_district_id | 发件人区县id |
sender_address | 发件人详细地址 |
sender_name | 发件人姓名 |
sender_phone | 发件人电话 |
send_location | 发件人坐标 |
payment_type | 支付方式 |
cargo_num | 货物个数 |
amount | 金额 |
estimate_arrive_time | 预计到达时间 |
distance | 距离,单位:公里 |
create_time | 创建时间 |
update_time | 更新时间 |
is_deleted | 是否删除 |
3.2.15 运单机构中转表(order_org_bound)
字段名 | 字段说明 |
id | 编号(主键) |
order_id | 运单编号 |
org_id | 机构id |
status | 状态 出库 入库 |
inbound_time | 入库时间 |
inbound_emp_id | 入库人员id |
sort_time | 分拣时间 |
sorter_emp_id | 分拣人员id |
outbound_time | 出库时间 |
outbound_emp_id | 出库人员id |
create_time | 创建时间 |
update_time | 修改时间 |
is_deleted | 删除标志 |
3.2.16 运单追踪表(order_trace_log)
字段名 | 字段说明 |
id | 编号(主键) |
order_id | 运单编号 |
trace_desc | 进度描述 |
create_time | 创建时间 |
cur_task_id | 当前快递任务id |
task_type | 任务类型:1 揽收 2 运输 3 中转 4派送 |
charge_emp_id | 负责人id |
remark | 备注 |
is_rollback | 是否回退中 |
update_time | 更新时间 |
is_deleted | 是否删除 |
3.2.17 员工机构关联表(sorter_info)
字段名 | 字段说明 |
id | 编号(主键) |
emp_id | 职员id |
org_id | 机构id |
create_time | 创建时间 |
update_time | 更新时间 |
is_deleted | 是否删除 |
3.2.18 运单运输线路明细表(transport_plan_line_detail)
字段名 | 字段说明 |
id | 编号(主键) |
order_id | 运单编号 |
start_org_id | 起始机构 |
end_org_id | 终点机构 |
line_base_id | 业务表线路id |
create_time | 创建时间 |
update_time | 更新时间 |
is_deleted | 是否删除 |
3.2.19 运输任务表(transport_task)
字段名 | 字段说明 |
id | 编号(主键) |
shift_id | 班次ID |
line_id | 线路ID |
start_org_id | 起始机构ID |
start_org_name | 起始机构名称 |
end_org_id | 目的机构id |
end_org_name | 目的机构名称 |
status | 任务状态 |
order_num | 运单个数 |
driver1_emp_id | 司机1 ID |
driver1_name | 司机1名称 |
driver2_emp_id | 司机2 ID |
driver2_name | 司机2名称 |
truck_id | 卡车ID |
truck_no | 卡车号牌 |
actual_start_time | 实际启动时间 |
actual_end_time | 实际到达时间 |
actual_distance | 实际行驶距离 |
create_time | 创建时间 |
update_time | 更新时间 |
is_deleted | 是否删除 |
3.2.20 运单运输任务关联表(transport_task_detail)
字段名 | 字段说明 |
id | 编号(主键) |
transport_task_id | 运输任务ID |
order_id | 运单ID |
sorter_emp_id | 分拣员id |
create_time | 创建时间 |
update_time | 更新时间 |
is_deleted | 是否删除 |
3.2.21 运输任务进度表(transport_task_process)
字段名 | 字段说明 |
id | 编号(主键) |
transport_task_id | 任务ID |
cur_distance | 当前行驶里程 |
line_distance | 线路里程 |
create_time | 创建时间 |
update_time | 更新时间 |
is_deleted | 是否删除 |
3.2.22 司机信息表(truck_driver)
字段名 | 字段说明 |
id | 编号(主键) |
emp_id | 员工ID |
org_id | 所属机构ID |
team_id | 所属车队ID |
license_type | 准驾车型 |
init_license_date | 初次领证日期 |
expire_date | 有效截止日期 |
license_no | 驾驶证号 |
license_picture_url | 驾照图片 |
is_enabled | 状态 |
create_time | 创建时间 |
update_time | 更新时间 |
is_deleted | 是否删除 |
3.2.23 卡车信息表(truck_info)
字段名 | 字段说明 |
id | 编号(主键) |
team_id | 所属车队id |
truck_no | 车牌号码 |
truck_model_id | 型号 |
device_gps_id | GPS设备id |
engine_no | 发动机编码 |
license_registration_date | 注册时间 |
license_last_check_date | 最后年检日期 |
license_expire_date | 失效日期 |
picture_url | 图片链接 |
is_enabled | 是否可用 |
create_time | 创建时间 |
update_time | 更新时间 |
is_deleted | 是否删除 |
3.2.24 卡车型号表(truck_model)
字段名 | 字段说明 |
id | 编号(主键) |
model_name | 型号名称 |
model_type | 型号类型 |
model_no | 型号编码 |
brand | 品牌 |
truck_weight | 整车重量(吨) |
load_weight | 额定载重(吨) |
total_weight | 总质量(吨) |
eev | 排放标准 |
boxcar_len | 货箱长m |
boxcar_wd | 货箱宽m |
boxcar_hg | 货箱高m |
max_speed | 最高时速(千米/时) |
oil_vol | 油箱容积(升) |
create_time | 创建时间 |
update_time | 更新时间 |
is_deleted | 是否删除 |
3.2.25 车队信息表(truck_team)
字段名 | 字段说明 |
id | 编号(主键) |
name | 车队名称 |
team_no | 车队编号 |
org_id | 所属机构 |
manager_emp_id | 负责人 |
create_time | 创建时间 |
update_time | 更新时间 |
is_deleted | 是否删除 |
3.2.26 用户地址表(user_address)
字段名 | 字段说明 |
id | 编号(主键) |
user_id | 用户id |
phone | 电话号 |
province_id | 所属省份id |
city_id | 所属城市id |
district_id | 所属区县id |
complex_id | 所属小区id |
address | 详细地址 |
is_default | 是否默认 0:否,1:是 |
create_time | 创建时间 |
update_time | 更新时间 |
is_deleted | 是否删除 |
3.2.27 用户信息表(user_info)
字段名 | 字段说明 |
id | 编号(主键) |
login_name | 用户名称 |
nick_name | 用户昵称 |
passwd | 用户密码 |
real_name | 用户姓名 |
phone_num | 手机号 |
| 邮箱 |
head_img | 头像 |
user_level | 用户级别 |
birthday | 用户生日 |
gender | 性别 M男,F女 |
create_time | 创建时间 |
update_time | 修改时间 |
is_deleted | 是否删除 |
4、总结
这个物流数仓是尚硅谷的教学视频。
在B站的视频:01_项目概述_哔哩哔哩_bilibili
物流数仓只用到了业务数据,而且用到的组件较少,业务逻辑较为简单,可以通过这个项目提高自己对数仓的理解和对数仓搭建的整体流程的理解。
有帮助的话请点个赞吧!