《数据仓库如何为业务赋能:一点资讯数据仓库实践》

相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

弱schema:如 JSON
强schema:如 protobuf
日志埋点管理
阶段2:采用SDK
SampleLog.Builder log = SampleLog.newBuilder(); log.setUserId(1234); log.setEvent(Event.CLICK); log.setImei(imei); log.setAndroidId(aid); log.setClientIp(ip); log.setDocId(docId); log.setTheme(Theme.MICRO_VIDEO); log.setRefreshId(rid); log.setPosition(pos); LogService.send(log.build());
传统裸写SQL的开发
数据表建设:指标计算框架化
计算框架:应用
list.db=user list.table=dim_user_define_table target.db=user taget.table=fact_user_define_stats_day period=daily
日志埋点管理
原始日志:业务迅速发展时,如何保证数据质量?
首页
视频
小视频
日志埋点管理
阶段1:采用强schema日志
{ "user_id": 1234, "event" : "click"
}
{ "userid": 1234, "event" : "Click"
}
{ "user": { "id": 1234 }, "action": "click"
专题ETL
专题ETL
专题ETL
维度表
明细事实 明细事实
维度表
明细事实
维度表
汇总事实
汇总事实
汇总事实
数据表建设:专题ETL
专题ETL
数据库 数据库
原始日志 ETL
原始日志 原始日志 ETL
数据库
专题ETL
专题ETL
专题ETL
维度表
明细事实 明细事实
维度表
明细事实
维度表
汇总事实
汇总事实
汇总事实
数据表建设:专题ETL
Intro
一点资讯业务概览
• 目前的访问量 • 日活7000万,人均每日阅读文章数26篇,视频日 均播放量7亿
• 流量生态 • 独立主应用,小米浏览器,oppo浏览器,开放 平台等等
• 内容生态 • 除了自媒体,还已接入知乎,汽车之家,快手, 优酷等内容源
Intro
大数据下数据仓库的挑战
• 数据量大 • 业务逻辑复杂易变
未使用SDK的埋点
核心思想:
• 把业务复杂性留给数据团队
• 设备信息获取标准化
LogAgent.clickMicroVideo(rid, pos, docID);
使用SDK的埋点
挑战: • 数据团队需要懂客户端开发
数据表建设
典型数据仓库结构
数据库 数据库
原始日志 ETL
原始日志 原始日志 ETL
数据库
汇总事实A
汇总事实B
出错几率大!测试成本高!
汇总事实C
数据表建设:指标计算框架化
解决方案:用计算框架代替裸写SQL
自定义维度表 (用户提供)
明细事实表 (管理员维护)
常用维度表 (管理员维护)
配置文件 (用户提供)
计算框架 汇总事实
• 采用高级语言编写 • 规范化维度表和明细事实表
join 的过程
UDF
日志 日志值域
Hive接口
Java接口 数据流水线
对应关系详表
BI系统
数据表建设:指标计算框架化
数据集市的噩梦:自洽性
数据库A
ETL
数据库B
维度表A 明细事实 维度表B 维度表C
汇总事实A
汇总事实B
汇总事实C
数据表建设:指标计算框架化
数据集市的噩梦:自洽性
数据库A
ETL
数据库B
维度表A 明细事实 维度表B 维度表C
ETL与专题ETL:分工
上游 职责 特点 用户 开发效率
ETL 原始日志 数据清洗,去重,反作弊等 大而全 数仓工程师为主 高(原有流水线加字段)
专题ETL ETL后的日志 提取与专题相关的内容 schema简明扼要 数据分析师 较低(可能需建立新流水线)
数据表建设:UDF
UDF:适用于未稳定/存储开销大的对应关系
}
message Event { CLICK = 0; VIEW = 1;
}
message SampleLog { optional uint64 userId = 1; optional Event event = 2;
}
SampleLog.Builder log = SampleLog.newBuilder(); log.setUserId(1234); log.setEvent(Event.CLICK); return log.build();
• 计算框架根据维度表和配置 文件确定事实表schema
• 用户无须做数据表 join 操作
数据表建设:指标计算框架化
计算框架:应用
select app_id, channel, client_version, count(*) as dau, sum(open_app) as open_app, sum(duration) as duration, sum(click_doc) as click_doc, sum(refresh) as refresh
from (select app_id, user_id, channel, client_version
from dim_user_define_table where day = '2018-12-06') user_define inner join (select app_id, user_id, open_app, duration, click_doc, refresh frLeabharlann Baidum fact_user_core_stats_detail where day = '2018-12-06') detail on user_define.app_id = detail.app_id and user_define.user_id = detail.user_id group by app_id, channel, client_version ;
• 数难取(如何快速开发?) • 出数慢(如何提高流水线处理速度?) • 算错数(如何保证自洽性和正确性?) • 发现并解释数据异动
Intro
我们的一些实践
• 日志埋点管理:数据质量从源头抓起 • 数据表建设
• 专题表的建设 • UDF 的使用 • 指标计算框架化:快而准的方案
• 指标监控:化繁为简划重点
相关文档
最新文档