尚硅谷数仓实战之1项目需求及架构设计

算法研
• 阅读 3025

@TOC

数仓笔记

数据仓库和数据集市详解:ODS、DW、DWD、DWM、DWS、ADS

尚硅谷数仓实战之1项目需求及架构设计

尚硅谷数仓实战之2数仓分层+维度建模

尚硅谷数仓实战之3数仓搭建

尚硅谷数据仓库4.0视频教程

B站直达:2021新版电商数仓V4.0丨大数据数据仓库项目实战
百度网盘:https://pan.baidu.com/s/1FGUb... ,提取码:yyds
阿里云盘:https://www.aliyundrive.com/s... ,提取码:335o

第2章 项目需求及架构设计

需求分析

  • 用户行为数据采集平台搭建
  • 业务数据采集平台搭建
  • 数据仓库维度建模
  • 业务埋点
  • 即席查询工具,随时进行指标分析
  • 集群监控,异常报警
  • 元数据管理
  • 质量监控
  • 权限管理

项目框架

技术选型

考虑因素:数据量大小、业务需求、行业内经验、技术成熟度、维护成本、总成本运算

相关技术列举:
尚硅谷数仓实战之1项目需求及架构设计

数据流程设计

根据需求选择合适的技术,设计规划具体的数据仓库架构流程
尚硅谷数仓实战之1项目需求及架构设计

框架版本选型

尚硅谷数仓实战之1项目需求及架构设计

尚硅谷测试稳定适配的版本
尚硅谷数仓实战之1项目需求及架构设计

服务器选型

尚硅谷数仓实战之1项目需求及架构设计

集群规模

尚硅谷数仓实战之1项目需求及架构设计

集群资源规划设计

在企业中通常会搭建一套生产集群和一套测试集群。生产集群运行生产任务,测试集群用于上线前代码编写和测试。

1)生产集群

(1)消耗内存的分开

(2)数据传输数据比较紧密的放在一起(Kafka 、Zookeeper)

(3)客户端尽量放在一到两台服务器上,方便外部访问

(4)有依赖关系的尽量放到同一台服务器(例如:Hive和Azkaban Executor)
12345678910
nnnndndndndndndndndn
rmrmnmnmnmnmnmnm
nmnm
zkzkzk
kafkakafkakafka
FlumeFlumeflume
HbaseHbaseHbase
hivehive
mysqlmysql
sparkspark
AzkabanAzkaban ESES

2)测试集群服务器规划

服务名称子服务服务器hadoop102服务器hadoop103服务器hadoop104
HDFSNameNode
DataNode
SecondaryNameNode
YarnNodeManager
Resourcemanager
ZookeeperZookeeper Server
Flume(采集日志)Flume
KafkaKafka
Flume(消费Kafka)Flume
HiveHive
MySQLMySQL
SqoopSqoop
PrestoCoordinator
Worker
AzkabanAzkabanWebServer
AzkabanExecutorServer
Spark
Kylin
HBaseHMaster
HRegionServer
Superset
Atlas
SolrJar
服务数总计 1988

第3章 数据生成模块

目标数据

我们要收集和分析的数据主要包括页面数据事件数据曝光数据启动数据错误数据

页面

页面数据主要记录一个页面的用户访问情况,包括访问时间、停留时间、页面路径等信息。
尚硅谷数仓实战之1项目需求及架构设计

字段名称字段描述
page_id页面idhome("首页"),category("分类页"),discovery("发现页"),top_n("热门排行"),favor("收藏页"),search("搜索页"),good_list("商品列表页"),good_detail("商品详情"),good_spec("商品规格"),comment("评价"),comment_done("评价完成"),comment_list("评价列表"),cart("购物车"),trade("下单结算"),payment("支付页面"),payment_done("支付完成"),orders_all("全部订单"),orders_unpaid("订单待支付"),orders_undelivered("订单待发货"),orders_unreceipted("订单待收货"),orders_wait_comment("订单待评价"),mine("我的"),activity("活动"),login("登录"),register("注册");
last_page_id上页id
page_item_type页面对象类型sku_id("商品skuId"),keyword("搜索关键词"),sku_ids("多个商品skuId"),activity_id("活动id"),coupon_id("购物券id");
page_item页面对象id
sourceType页面来源类型promotion("商品推广"),recommend("算法推荐商品"),query("查询结果商品"),activity("促销活动");
during_time停留时间(毫秒)
ts跳入时间

事件

事件数据主要记录应用内一个具体操作行为,包括操作类型、操作对象、操作对象描述等信息。
尚硅谷数仓实战之1项目需求及架构设计

字段名称字段描述
action_id动作idfavor_add("添加收藏"),favor_canel("取消收藏"),cart_add("添加购物车"),cart_remove("删除购物车"),cart_add_num("增加购物车商品数量"),cart_minus_num("减少购物车商品数量"),trade_add_address("增加收货地址"),get_coupon("领取优惠券");注:对于下单、支付等业务数据,可从业务数据库获取。
item_type动作目标类型sku_id("商品"),coupon_id("购物券");
item动作目标id
ts动作时间

曝光

曝光数据主要记录页面所曝光的内容,包括曝光对象,曝光类型等信息。
尚硅谷数仓实战之1项目需求及架构设计

字段名称字段描述
displayType曝光类型promotion("商品推广"),recommend("算法推荐商品"),query("查询结果商品"),activity("促销活动");
item_type曝光对象类型sku_id("商品skuId"),activity_id("活动id");
item曝光对象id
order曝光顺序

启动

启动数据记录应用的启动信息。
尚硅谷数仓实战之1项目需求及架构设计

字段名称字段描述
entry启动入口icon("图标"),notification("通知"),install("安装后启动");
loading_time启动加载时间
open_ad_id开屏广告id
open_ad_ms广告播放时间
open_ad_skip_ms用户跳过广告时间
ts启动时间

错误

错误数据记录应用使用

过程中的错误信息,包括错误编号及错误信息。

字段名称字段描述
error_code错误码
msg错误信息

数据埋点

主流埋点方式(了解)

目前主流的埋点方式,有代码埋点(前端/后端)、可视化埋点全埋点三种。

代码埋点是通过调用埋点SDK函数,在需要埋点的业务逻辑功能位置调用接口,上报埋点数据。例如,我们对页面中的某个按钮埋点后,当这个按钮被点击时,可以在这个按钮对应的 OnClick 函数里面调用SDK提供的数据发送接口,来发送数据。

可视化埋点只需要研发人员集成采集 SDK,不需要写埋点代码,业务人员就可以通过访问分析平台的“圈选”功能,来“圈”出需要对用户行为进行捕捉的控件,并对该事件进行命名。圈选完毕后,这些配置会同步到各个用户的终端上,由采集 SDK 按照圈选的配置自动进行用户行为数据的采集和发送。

全埋点是通过在产品中嵌入SDK,前端自动采集页面上的全部用户行为事件,上报埋点数据,相当于做了一个统一的埋点。然后再通过界面配置哪些数据需要在系统里面进行分析。

埋点数据上报时机

埋点数据上报时机包括两种方式。

方式一,在离开该页面时,上传在这个页面产生的所有数据(页面、事件、曝光、错误等)。优点,批处理,减少了服务器接收数据压力。缺点,不是特别及时。

方式二,每个事件、动作、错误等,产生后,立即发送。优点,响应及时。缺点,对服务器接收数据压力比较大。

本次项目采用方式一埋点。

埋点数据日志结构

我们的日志结构大致可分为两类,一是普通页面埋点日志,二是启动日志。

普通页面日志结构如下,每条日志包含了,当前页面的页面信息,所有事件(动作)、所有曝光信息以及错误信息。除此之外,还包含了一系列公共信息,包括设备信息,地理位置,应用信息等,即下边的common字段。

(1)普通页面埋点日志格式

{

 "common": {          -- 公共信息

  "ar": "230000",        -- 地区编码

  "ba": "iPhone",        -- 手机品牌

  "ch": "Appstore",       -- 渠道

  "is_new": "1",--是否首日使用,首次使用的当日,该字段值为1,过了24:00,该字段置为0

  "md": "iPhone 8",       -- 手机型号

  "mid": "YXfhjAYH6As2z9Iq", -- 设备id

  "os": "iOS 13.2.9",      -- 操作系统

  "uid": "485",         -- 会员id

  "vc": "v2.1.134"       -- app版本号

 },

"actions": [           --动作(事件)  

  {

   "action_id": "favor_add",  --动作id

   "item": "3",          --目标id

   "item_type": "sku_id",    --目标类型

   "ts": 1585744376605      --动作时间戳

  }

 ],

 "displays": [

  {

   "displayType": "query",     -- 曝光类型

   "item": "3",           -- 曝光对象id

   "item_type": "sku_id",     -- 曝光对象类型

   "order": 1,           --出现顺序

   "pos_id": 2            --曝光位置

  },

  {

   "displayType": "promotion",

   "item": "6",

   "item_type": "sku_id",

   "order": 2, 

   "pos_id": 1

  }

 ],

 "page": {            --页面信息

  "during_time": 7648,     -- 持续时间毫秒

  "item": "3",          -- 目标id

  "item_type": "sku_id",    -- 目标类型

  "last_page_id": "login",   -- 上页类型

  "page_id": "good_detail",  -- 页面ID

  "sourceType": "promotion"  -- 来源类型

 },

"err":{           --错误

"error_code": "1234",    --错误码

  "msg": "***********"    --错误信息

},

 "ts": 1585744374423  --跳入时间戳,何时发送到服务器

}
(2)启动日志格式

启动日志结构相对简单,主要包含公共信息,启动信息和错误信息。

{

 "common": {

  "ar": "370000",

  "ba": "Honor",

  "ch": "wandoujia",

  "is_new": "1",

  "md": "Honor 20s",

  "mid": "eQF5boERMJFOujcp",

  "os": "Android 11.0",

  "uid": "76",

  "vc": "v2.1.134"

 },

 "start": {  

  "entry": "icon",     --icon手机图标  notice 通知  install 安装后启动

  "loading_time": 18803,  --启动加载时间

  "open_ad_id": 7,     --广告页ID

  "open_ad_ms": 3449,   -- 广告总共播放时间

  "open_ad_skip_ms": 1989  -- 用户跳过广告时点

 },

"err":{           --错误

"error_code": "1234",    --错误码

  "msg": "***********"    --错误信息

},

 "ts": 1585744304000

}
​```xxxxxxxxxx { "common": {  "ar": "370000",  "ba": "Honor",  "ch": "wandoujia",  "is_new": "1",  "md": "Honor 20s",  "mid": "eQF5boERMJFOujcp",  "os": "Android 11.0",  "uid": "76",  "vc": "v2.1.134" }, "start": {    "entry": "icon",     --icon手机图标  notice 通知  install 安装后启动  "loading_time": 18803,  --启动加载时间  "open_ad_id": 7,     --广告页ID  "open_ad_ms": 3449,   -- 广告总共播放时间  "open_ad_skip_ms": 1989  -- 用户跳过广告时点 },"err":{           --错误"error_code": "1234",    --错误码  "msg": "***********"    --错误信息}, "ts": 1585744304000}
点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
翼
4年前
js 数组 转为树形结构
需要转换为树形的数组vardata{"orderById":null,"platformCommissionProportion":1,"name":"添加剂","pid":13,"id":26
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
Jacquelyn38 Jacquelyn38
4年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
Wesley13 Wesley13
3年前
SQL利用函数或存储过程求男或女的总分平均分
!(https://oscimg.oschina.net/oscnet/633e11621f3e13e713cf063db00d72c8aa0.png)函数alterfunctionxb(@xingbievarchar(2))returnstableas
Wesley13 Wesley13
3年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Wesley13 Wesley13
3年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
Stella981 Stella981
3年前
Django中Admin中的一些参数配置
设置在列表中显示的字段,id为django模型默认的主键list_display('id','name','sex','profession','email','qq','phone','status','create_time')设置在列表可编辑字段list_editable
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
1年前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这
美凌格栋栋酱 美凌格栋栋酱
4个月前
Oracle 分组与拼接字符串同时使用
SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(
算法研
算法研
Lv1
殊方日落玄猿哭,旧国霜前白雁来。
文章
3
粉丝
0
获赞
0