一起学数据仓库-零

一起学数据仓库-零,第1张

一起学数据仓库-零

数据仓库建设前期准备
  • 一、数仓概念
  • 二、项目需求及架构设计
        • 1. 项目需求分析
        • 2. 项目框架
  • 二、机器规划
  • 三、准备数据
        • 1. 页面数据
        • 2. 事件(动作)数据
        • 3. 曝光数据
        • 4. 启动数据
        • 5. 错误数据
        • 6. 数据埋点方式
        • 7. 数据上报时机
        • 8. 埋点数据日志结构
  • 四、准备机器环境

一、数仓概念
  • 数据仓库( Data Warehouse ),是为企业制定决策,提供数据支持的。可以帮助企业,改进业务流程、提高产品质量等。
  • 数据仓库的输入数据通常包括:业务数据、用户行为数据和爬虫数据等
  • 业务数据:就是各行业在处理事务过程中产生的数据。比如用户在电商网站中登录、下单、支付等过程中,需要和网站后台数据库进行增删改查交互,产生的数据就是业务数据。业务数据通常存储在MySQL、Oracle等数据库中。
  • 用户行为数据:用户在使用产品过程中,通过埋点收集与客户端产品交互过程中产生的数据,并发往日志服务器进行保存。比如页面浏览、点击、停留、评论、点赞、收藏等。用户行为数据通常存储在日志文件中。
  • 爬虫数据:通常事通过技术手段获取其他公司网站的数据。
二、项目需求及架构设计 1. 项目需求分析
  • 用户行为数据采集平台
  • 业务数据采集平台
  • 数据传输平台
  • 数据仓库维度建模
  • 分析电商核心主题、统计相关报表
  • 即席查询平台
  • 监控告警平台
  • 元数据管理平台
  • 数据质量平台
  • 权限管理平台
2. 项目框架
  1. 技术选型
  • 考虑因素:
- 数据量大小
- 业务需求:准确性、时效性等
- 行业内经验:技术在行业内是否普及,相关文章文档是否比较齐全
- 技术成熟度
- 开发维护成本
- 成本预算
  • 数据传输:Flume、Kafka、Sqoop、DataX、Seatunnel(Waterdrop)、Spark、Flink、Logstash、Filebeat、Scribe
  • 数据存储:MySQL、HDFS、Hbase、Redis、MongoDB、Doris/StarRocks
  • 数据计算:Hive、Tez、Spark、Flink、Strom
  • 数据查询:Presto、Kylin、Impala、Druid、ClickHouse、Doris/StarRocks
  • 数据可视化:Echarts、Superset、QuickBI、DataV
  • 任务调度:Azkaban、Oozie、DolphinScheduler、Airflow
  • 集群监控:Zabbix、Prometheux
  • 元数据管理:Atlas
  • 权限管理:Ranger、Sentry
  1. 数据流程规划

  2. 版本选型

  • 框架版本一般选择半年前左右的稳定版
二、机器规划

个人学习使用,就用VMare安装虚拟机,模拟集群。(之前买过阿里云ecs,用了一段时间,感觉长期用的话,自己买主机更合算,淘了台洋垃圾) ^ . ^

三、准备数据

以电商行业为例,要收集和分析的数据主要包括页面数据、事件数据、曝光数据、启动数据和错误数据。

1. 页面数据

页面数据主要记录在一个页面内,用户的访问情况,包括访问时间、停留时间、页面路径等信息。

  • page_id:页面id
home("首页"),
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_item:页面停留时间(ms)
  • ts:页面跳入时间
2. 事件(动作)数据

事件数据主要记录应用内一个具体 *** 作行为,包括 *** 作类型、 *** 作对象、 *** 作对象描述等信息。

  • action_id:动作id
favor_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:动作时间
3. 曝光数据

曝光数据主要记录页面所曝光的内容,包括曝光对象,曝光类型等信息,即在页面上被渲染出来,用户可见的内容。

  • displayType:曝光类型
promotion("商品推广"),
recommend("算法推荐商品"),
query("查询结果商品"),
activity("促销活动");
  • item_type:曝光对象类型
sku_id("商品skuId"),
activity_id("活动id");
  • item:曝光对象id
  • order:曝光顺序
4. 启动数据

启动数据记录应用的启动信息。

  • entry:启动入口
icon("图标"),
notification("通知"),
install("安装后启动");
  • loading_time:启动加载时间
  • open_ad_id:开屏广告id
  • open_ad_md:广告播放时间
  • open_ad_skip_ms:用户跳过广告时间
  • ts:启动时间
5. 错误数据

应用使用过程中发生的错误日志信息。

  • error_code:错误码
  • msg:错误信息
6. 数据埋点方式
  1. 代码埋点:通过调用埋点SDK函数,在需要埋点的业务逻辑功能位置调用接口,上报埋点数据。例如,我们对页面中的某个按钮埋点后,当这个按钮被点击时,可以在这个按钮对应的 onClick 函数里面调用SDK提供的数据发送接口,来发送数据。
  2. 可视化埋点:只需要研发人员集成采集 SDK,不需要写埋点代码,业务人员就可以通过访问分析平台的“圈选”功能,来“圈”出需要对用户行为进行捕捉的控件,并对该事件进行命名。圈选完毕后,这些配置会同步到各个用户的终端上,由采集 SDK 按照圈选的配置自动进行用户行为数据的采集和发送。
  3. 全埋点:通过在产品中嵌入SDK,前端自动采集页面上的全部用户行为事件,上报埋点数据,相当于做了一个统一的埋点。然后再通过界面配置哪些数据需要在系统里面进行分析。

你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。

7. 数据上报时机
  • 离开页面时
    在离开该页面时,上传在这个页面产生的所有数据(页面、事件、曝光、错误等)。优点,批处理,减少了服务器接收数据压力。缺点,不是特别及时。
  • 事件产生时
    每个事件、动作、错误等,产生后,立即发送。优点,响应及时。缺点,对服务器接收数据压力比较大。
8. 埋点数据日志结构

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

  1. 普通页面日志
    普通页面日志结构如下,每条日志包含了,当前页面的页面信息,所有事件(动作)、所有曝光信息以及错误信息。除此之外,还包含了一系列公共信息,包括设备信息,地理位置,应用信息等,即下边的common字段。
{
  "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
    },
    {
      "displayType": "promotion",
      "item": "9",
      "item_type": "sku_id",
      "order": 3, 
      "pos_id": 3
    },
    {
      "displayType": "recommend",
      "item": "6",
      "item_type": "sku_id",
      "order": 4, 
      "pos_id": 2
    },
    {
      "displayType": "query ",
      "item": "6",
      "item_type": "sku_id",
      "order": 5, 
      "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  --跳入时间戳
}
  1. 启动日志
    启动日志结构相对简单,主要包含公共信息,启动信息和错误信息。
{
  "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
}
四、准备机器环境
  • VMware虚拟机安装centos7.5系统
  • 每台机器分配4核、16G内存、50G硬盘
  • 安装jdk1.8、python3
  • 克隆6台相同环境机器,搭建集群

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/5696250.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存