大数据-233 离线数仓 - 留存会员 需求、创建与加载DWS 层、ADS 层 与 小结

[复制链接]
发表于 2024-12-5 04:18:59 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
点一下关注吧!!!非常感谢!!持续更新!!!

Java篇开始了!

现在开始更新 MyBatis,一起深入浅出!
现在已经更新到了:



  • Hadoop(已更完)
  • HDFS(已更完)
  • MapReduce(已更完)
  • Hive(已更完)
  • Flume(已更完)
  • Sqoop(已更完)
  • Zookeeper(已更完)
  • HBase(已更完)
  • Redis (已更完)
  • Kafka(已更完)
  • Spark(已更完)
  • Flink(已更完)
  • ClickHouse(已更完)
  • Kudu(已更完)
  • Druid(已更完)
  • Kylin(已更完)
  • Elasticsearch(已更完)
  • DataX(已更完)
  • Tez(已更完)
  • 数据挖掘(已更完)
  • Prometheus(已更完)
  • Grafana(已更完)
  • 离线数仓(正在更新…)
章节内容

上节我们完成了如下的内容(新增会员模块):


  • DWS 层
  • ADS 层
  • 创建 Hive 执行脚本

留存会员



  • 留存会员与留存率:某段时间的新增会员,经过一段时间后,仍继续使用应用认为是留存会员,这部分会员占当时新增会员的比例为留存率。
  • 需求:1日、2日、3日的会员留存率和会员留存率



  • 10W新会员:dws_member_add_day(dt=08-01)明细
  • 3w:特点是1号是新会员,在2日启动了(2日的启动日志日志)dws_member_start_day
DWS 的作用

同一数据模子

将原始数据(ODS层)按照肯定的逻辑模子举行整合、清洗、加工,形成标准化的数据结构。
支持对数据的多维度、多粒度分析。
支持业务场景

满足企业对汗青数据的查询和分析需求。
支持 OLAP(在线分析处理)操纵,如聚合查询、钻取和切片。
数据细化与分类

将数据按照主题域(如贩卖、财务、库存等)分类,便于管理和查询。
通常保持较高的细节粒度,便于灵活扩展。
数据准确性与划一性

经过处理的数据经过校验,确保逻辑关系精确,可以或许为下游提供准确的划一性数据。
创建DWS层表

  1. -- 会员留存明细
  2. drop table if exists dws.dws_member_retention_day;
  3. create table dws.dws_member_retention_day
  4. (
  5.   `device_id` string,
  6.   `uid` string,
  7.   `app_v` string,
  8.   `os_type` string,
  9.   `language` string,
  10.   `channel` string,
  11.   `area` string,
  12.   `brand` string,
  13.   `add_date` string comment '会员新增时间',
  14.   `retention_date` int comment '留存天数'
  15. )COMMENT '每日会员留存明细'
  16. PARTITIONED BY (`dt` string)
  17. stored as parquet;
复制代码
执行结果如下图所示:

加载DWS层数据

  1. vim /opt/wzk/hive/dws_load_member_retention_day.sh
复制代码
写入的内容如下所示:
  1. #!/bin/bash
  2. source /etc/profile
  3. if [ -n "$1" ] ;then
  4. do_date=$1
  5. else
  6. do_date=`date -d "-1 day" +%F`
  7. fi
  8. sql="
  9. drop table if exists tmp.tmp_member_retention;
  10. create table tmp.tmp_member_retention as
  11. (
  12.   select t2.device_id,
  13.   t2.uid,
  14.   t2.app_v,
  15.   t2.os_type,
  16.   t2.language,
  17.   t2.channel,
  18.   t2.area,
  19.   t2.brand,
  20.   t2.dt add_date,
  21.   1
  22.   from dws.dws_member_start_day t1 join dws.dws_member_add_day
  23.   t2 on t1.device_id=t2.device_id
  24.   where t2.dt=date_add('$do_date', -1)
  25.   and t1.dt='$do_date'
  26.   union all
  27.   select t2.device_id,
  28.   t2.uid,
  29.   t2.app_v,
  30.   t2.os_type,
  31.   t2.language,
  32.   t2.channel,
  33.   t2.area,
  34.   t2.brand,
  35.   t2.dt add_date,
  36.   2
  37.   from dws.dws_member_start_day t1 join dws.dws_member_add_day
  38.   t2 on t1.device_id=t2.device_id
  39.   where t2.dt=date_add('$do_date', -2)
  40.   and t1.dt='$do_date'
  41.   union all
  42.   select t2.device_id,
  43.   t2.uid,
  44.   t2.app_v,
  45.   t2.os_type,
  46.   t2.language,
  47.   t2.channel,
  48.   t2.area,
  49.   t2.brand,
  50.   t2.dt add_date,
  51.   3
  52.   from dws.dws_member_start_day t1 join dws.dws_member_add_day
  53.   t2 on t1.device_id=t2.device_id
  54.   where t2.dt=date_add('$do_date', -3)
  55.   and t1.dt='$do_date'
  56. );
  57. insert overwrite table dws.dws_member_retention_day
  58. partition(dt='$do_date')
  59. select * from tmp.tmp_member_retention;
  60. "
  61. hive -e "$sql"
复制代码
写入的内容如下所示:

ADS 作用

聚合和简化数据

将 DWS 层中多表、多主题域的数据聚合成简单易用的表或视图。
直接输出满足业务需求的数据结果。
面向业务应用

通过设计宽表或高性能视图,直接支持具体的业务场景和报表需求。
响应快速查询需求,如实时数据的展示。
数据分发与集成

为前端的 BI 工具、报表系统或 API 服务提供高效的查询接口。
可以或许通过缓存机制或物化视图加速查询性能。
轻量化与高性能

尽量减少数据量,保留业务最关心的关键指标。
接纳预聚合、预盘算等技术提升查询服从。
创建ADS层表

  1. -- 会员留存数
  2. drop table if exists ads.ads_member_retention_count;
  3. create table ads.ads_member_retention_count
  4. (
  5.   `add_date` string comment '新增日期',
  6.   `retention_day` int comment '截止当前日期留存天数',
  7.   `retention_count` bigint comment '留存数'
  8. ) COMMENT '会员留存数'
  9. partitioned by(dt string)
  10. row format delimited fields terminated by ',';
  11. -- 会员留存率
  12. drop table if exists ads.ads_member_retention_rate;
  13. create table ads.ads_member_retention_rate
  14. (
  15.   `add_date` string comment '新增日期',
  16.   `retention_day` int comment '截止当前日期留存天数',
  17.   `retention_count` bigint comment '留存数',
  18.   `new_mid_count` bigint comment '当日会员新增数',
  19.   `retention_ratio` decimal(10,2) comment '留存率'
  20. ) COMMENT '会员留存率'
  21. partitioned by(dt string)
  22. row format delimited fields terminated by ',';
复制代码
执行结果如下图所示:

加载ADS层数据

  1. vim /opt/wzk/hive/ads_load_member_retention.sh
复制代码
写入的内容如下所示:
  1. #!/bin/bash
  2. source /etc/profile
  3. if [ -n "$1" ] ;then
  4.   do_date=$1
  5. else
  6.   do_date=`date -d "-1 day" +%F`
  7.   fi
  8.   sql="
  9. insert overwrite table ads.ads_member_retention_count
  10. partition (dt='$do_date')
  11. select add_date, retention_date,
  12. count(*) retention_count
  13. from dws.dws_member_retention_day
  14. where dt='$do_date'
  15. group by add_date, retention_date;
  16. insert overwrite table ads.ads_member_retention_rate
  17. partition (dt='$do_date')
  18. select t1.add_date,
  19. t1.retention_day,
  20. t1.retention_count,
  21. t2.cnt,
  22. t1.retention_count/t2.cnt*100
  23. from ads.ads_member_retention_count t1 join
  24. ads.ads_new_member_cnt t2 on t1.dt=t2.dt
  25. where t1.dt='$do_date';
  26. "
  27. hive -e "$sql"
复制代码
备注:最后一条SQL的连线条件应该为:t1.add_date=t2.dt。
写入的内容如下所示:

暂时小结

到此,我们的数仓根本上构建完毕,后续将数据导入举行具体的处理。

离线数仓(Data Warehouse)通常分为多个条理,以便更好地组织数据。其中,DWS(Data Warehouse Service)和 ADS(Application Data Service)是数据堆栈中两个告急的逻辑层级,分别负担不同的功能。


  • DWS:是数仓的核心层,旨在加工、汇总和提供高复用的数据服务。
  • ADS:是数仓的应用层,专注于满足特定业务场景的需求。
WS(Data Warehouse Service)——服务层或中间层
界说:DWS 通常是离线数仓中的汇总层或服务层,重要对数据举行整理、加工和聚合,为上层的数据分析或应用提供服务。
ADS(Application Data Service)——应用层
界说:ADS 是数仓中的应用层,通常是直接面向业务需求,提供特定场景下所需的分析结果或服务。
DWS 与 ADS 的关系


  • DWS 是 ADS 的上游:DWS 提供的标准化、可复用的数据服务是 ADS 构建的基础。
  • 功能定位不同:DWS 更方向数据整合与标准化,而 ADS 更关注业务需求的个性化满足。
  • 数据粒度:DWS 的数据粒度更细,ADS 通常是基于 DWS 的聚合和过滤,面向特定需求输出。
回复

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表