# Hadoop离线数据分析平台实战——230项目数据存储结构设计Hadoop离线数据分析平台实战——230项目数据存储结构设计

时间:2022-05-07
本文章向大家介绍# Hadoop离线数据分析平台实战——230项目数据存储结构设计Hadoop离线数据分析平台实战——230项目数据存储结构设计,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

Hadoop离线数据分析平台实战——230项目数据存储结构设计

数据存储设计

在本次项目中设计到数据存储的有三个地方: 第一个就是将原始的日志数据按天保存到hdfs文件系统中; 第二个就是将etl解析后的数据保存到hbase中; 第三个就是将分析结果保存到mysql数据库中。 其中存储到hbase和mysql的这两个过程需要设计具体的存储结构。

HBase表结构设计

由于我们需要按天进行数据分析, 所以我们的hbase的rowkey中必须包含时间戳或者我们一天的数据就建立一个表。 这里我们采用在rowkey中包含时间戳的方式来进行讲解; 另外hbase要求列簇一般尽量的少而且短,我们这里采用log来标示列簇。 所以最终我们创建一个单列簇的rowkey包含时间戳的eventlog表。 命令如下: create 'eventlog', 'log'。rowkey设计规则为:timestamp+uuid.hashcode+random(4)

MySQL表结构设计

在mysql中我们采用维度信息表+统计分析结果表+分析辅助表三类表组成。 其中维度信息表用于存储维度相关信息,名称格式为:dimension_*; 统计分析结果表用户存储最终的统计分析结果,以dimension维度id做主健,名称格式为:stats_*; 分析辅助表主要用户在分析过程中使用到的其他辅助类型表。

MySql维度信息表设计

根据我们最终统计的维度信息来看,我们分别需要创建以下八个维度表: 平台维度(platform),时间维度(date),浏览器维度(browser),地域维度(location),支付方式维度(payment),货币类型维度(currency_type),event维度(event),外链维度(inbound)。 另外还分别需要一个kpi维度和一个操作系统维度(os)表。 注意os表在本次项目中不会用到。

最终统计分析模块和维度表关系

分析模块

相关维度表

用户基本信息分析

platform、date

浏览器信息分析

platform、date、browser

地域信息分析

platform、date、location

用户浏览深度分析

platform、date、kpi

外链信息分析

platform、date、inbound

订单信息分析

platform、date、currency_type、payment

事件分析

platform、date、event

MySql统计分析结果表设计

我们最终需要进行七个模块的数据分析, 这七个模块的展示数据最终是从我们的mysql数据库中获取的, 那么接下来就分别从这七个模块来分析对应的mysql表结构设计。

用户基本信息分析模块表结构设计

用户基本信息分析模块中要求数据库对应表有以下几个维度的数据: 新增用户数、活跃用户数、总用户数、新增会员数、活跃会员数、总会员数、会话个数、会话长度这八个统计指标, 除此之外还需要platform和date这两个维度信息id以及created字段来标示修改时间。 其中通过platform和date这两个字段信息来唯一确定表数据, 设计表名为: stats_user。 除了这个表以外,由于我们还需要统计分时段的数据信息,故还要求有一个分时存储统计数据的表,设计表名为:stats_hourly。

stats_user表结构

列名

类型

默认值

描述

platform_dimension_id

int(11)

非空,0

平台id,pkey

date_dimension_id

int(11)

非空,0

日期id,pkey

active_users

int(11)

空。0

活跃用户数

new_install_users

int(11)

空。0

新增用户数

total_intall_users

int(11)

空。0

总用户数

sessions

int(11)

空。0

会话个数

sessions_length

int(11)

空。0

会话长度

total_members

int(11)

空。0

总会员数

active_members

int(11)

空。0

活跃会员数

new_members

int(11)

空。0

新增会员数

created

date

空。null

记录日期

浏览器信息分析模块表结构设计

浏览器信息分析和用户基本信息分析基本类型, 也包含以下几个维度的数据: 新增用户数、活跃用户数、总用户数、新增会员数、活跃会员数、总会员数、会话个数、会话长度这八个统计指标, 除此之外还需要一个pv计数的统计指标以及platform、date、browser这三个维度信息字段和create标示修改日期的字段。 其中通过platform、date和browser这三个字段信息来唯一确定表数据。 设计表名为: stats_device_browser

stats_device_browser表结构

列名

类型

默认值

描述

platform_dimension_id

int(11)

非空,0

平台id,pkey

date_dimension_id

int(11)

非空,0

日期id,pkey

browser_dimension_id

int(11)

非空,0

浏览器id,pkey

active_user

int(11)

空,0

活跃用户数

new_install_users

int(11)

空,0

新增用户数

total_intall_users

int(11)

空,0

总用户数

sessions

int(11)

空,0

会话个数

sessions_length

int(11)

空,0

会话长度

total_members

int(11)

空,0

总会员数

active_members

int(11)

空,0

活跃会员数

new_members

int(11)

空,0

新增会员数

pv

int(11)

空,0

pv数

created

date

空,null

最后修改日期

地域信息分析模块表结构设计

地域信息分析模块只分析活跃用户的地域分布情况以及跳出率相关分析, 故需要以下几个统计指标: 活跃用户数、会话个数、跳出会话个数。 除此之外需要platform、date、location这三个维度信息字段和create标示修改日期的字段。 其中通过platform、date和location这三个字段信息来唯一确定表数据。 设计表名为: stats_device_location

stats_device_location表结构

列名

类型

默认值

描述

platform_dimension_id

int(11)

非空,0

平台id,pkey

date_dimension_id

int(11)

非空,0

日期id,pkey

location_dimension_id

int(11)

非空,0

地域id,pkey

active_user

int(11)

空,0

活跃用户数

sessions

int(11)

空,0

会话个数

bounce_sessions

int(11)

空,0

跳出会话个数

created

date

空,null

最后修改日期

用户浏览深度分析模块表结构设计

用户浏览深度我们通过计算访问不同数量页面的用户数/会话数来表示, 在本次项目中我们分为8个不同数量级的指标, 分别为:访问1个pv、访问2个pv、访问3个pv、访问4个pv,访问5-10个pv(包含5但不包含10),访问10-30个pv,访问30-60个pv,访问60+pv。 除此之外需要platform、date、kpi这三个维度信息字段和create标示修改日期的字段。 其中通过platform、date和kpi这三个字段信息来唯一确定表数据。 设计表名为: stats_view_depth

列名

类型

默认值

描述

platform_dimension_id

int(11)

非空,0

平台id,pkey

date_dimension_id

int(11)

非空,0

日期id,pkey

kpi_dimension_id

int(11)

非空,0

kpiid,pkey

pv1

int(11)

非空,0

访问1个页面

pv2

int(11)

非空,0

访问2个页面

pv3

int(11)

非空,0

访问3个页面

pv4

int(11)

非空,0

访问4个页面

pv5_10

int(11)

非空,0

访问5-10个页面

pv11_30

int(11)

非空,0

访问11-29个页面

pv30_60

int(11)

非空,0

访问30-59个页面

pv60plus

int(11)

非空,0

访问60+个页面

created

date

空,null

最后修改日期

外链信息分析模块表结构设计

外链信息分析主要包括外链构成(偏好)分析和跳出率分析。 其中外链构成(偏好)我们通过活跃用户数来标示, 需要我们需要几下几个统计指标: 活跃用户数、会话个数、跳出会话个数。 除此之外需要platform、date、inbound这三个维度信息字段和create标示修改日期的字段。 其中通过platform、date和inbound这三个字段信息来唯一确定表数据。 设计表名为: stats_inbound

stats_inbound表结构

列名

类型

默认值

描述

platform_dimension_id

int(11)

非空,0

平台id,pkey

date_dimension_id

int(11)

非空,0

日期id,pkey

inbound_dimension_id

int(11)

非空,0

外链id,pkey

active_user

int(11)

空,0

活跃用户数

sessions

int(11)

空,0

会话个数

bounce_sessions

int(11)

空,0

跳出会话个数

created

date

空,null

最后修改日期

订单信息分析模块表结构设计

订单信息分析需要分析订单数量和订单金额相关统计信息, 故需要以下几个指标的数据分析: 订单数量、成功支付的订单数量、退款订单数量、订单金额、成功支付金额、退款金额、总成功支付金额、总退款金额。 除此之外,我们还需要使用platform、date、currency_type和payment四个维度字段类表示确认唯一记录。 另外需要添加一个created字段来表示数据日期。 表名设计为:stats_order

stats_order表结构

列名

类型

默认值

描述

platform_dimension_id

int(11)

非空,0

平台id,pkey

date_dimension_id

int(11)

非空,0

日期id,pkey

currency_type_dimension_id

int(11)

非空,0

货币类型id,pkey

payment_type_dimension_id

int(11)

非空,0

支付类型id,pkey

orders

int(11)

空,0

订单数量

success_orders

int(11)

空,0

成功支付的订单数量

refund_orders

int(11)

空,0

退款的订单数量

order_amount

int(11)

空,0

订单金额

revenue_amount

int(11)

空,0

支付金额

refund_amount

int(11)

空,0

退款金额

total_revenue_amount

int(11)

空,0

总的支付金额

total_refund_amount

int(11)

空,0

总的退款金额

created

date

空,null

最后修改日期

事件分析模块表结构设计

在本次项目中,事件分析主要就是分析事件的触发次数, 故对于的数据存储结构为:times(触发次数)以及platform、date、event三个维度字段和created字段, 表名设计为:stats_event

stats_event表结构

列名

类型

默认值

描述

platform_dimension_id

int(11)

非空,0

平台id,pkey

date_dimension_id

int(11)

非空,0

日期id,pkey

event_dimension_id

int(11)

非空,0

event维度id,pkey

times

int(11)

空,0

触发次数

created

date

空,null

最后修改日期

MySql表结构设计总述

我们通过维度信息表和统计分析结果表的整合来保证我们数据展示的正常性,具体创建表结果的文件参考: ..文档report.sql ; 其中我们创建数据库的命令为:CREATE DATABASE report DEFAULT CHARACTER SET utf8 ;