0


大数据-232 离线数仓 - 新增会员 需求、创建与加载DWS 层、ADS 层 与 小结

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

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 执行脚本

在这里插入图片描述

新增会员

  • 留存会员:某段时间的新增会员,经过一段时间后,仍然使用应用认为是留存的会员。
  • 新增会员:第一次使用应用的用户,定义为新增会员,卸载再次安装的设备,不会被算作是新增用户

新增会员先计算 => 计算会员留存

需求描述

每日新增会员数
08-02:DWD,会员每日启动明细(95-110);所有会员信息(1-100)

  • 新增会员 101-110
  • 新增会员数据+旧的会员的信息 = 新的所有会员信息(1-110)

08-03:DWD,会员每日启动明细(100-120);所有会员的信息(1-110)

  • 新增会员:111-120
  • 新增会员数据 + 旧的所有会员的信息 = 新的所有会员的信息(1-120)

计算步骤:

  • 计算新增会员
  • 更新所有会员信息

改进后方法:

  • 在所有会员信息中增加时间列,表示这个会员是哪一天成为新增会员
  • 只需要一张表:所有会员的信息(id,dt)
  • 将新增会员插入所有会员表中

案例:如何计算新增会员

-- t1.dat 的数据如下4,2020-08-025,2020-08-026,2020-08-027,2020-08-028,2020-08-029,2020-08-02-- 日启动表 => DWSdroptable t1;createtable t1(id int, dt string)row format delimited fieldsterminatedby',';loaddatalocal inpath '/opt/wzk/hive/data/t1.dat'intotable t1;

执行如下图所示:
在这里插入图片描述

继续执行

-- t2.dat 的数据如下1,2020-08-012,2020-08-013,2020-08-014,2020-08-015,2020-08-016,2020-08-01-- 全量数据 => DWSdroptable t2;createtable t2(id int, dt string)row format delimited fieldsterminatedby',';loaddatalocal inpath '/opt/wzk/hive/data/t2.dat'intotable t2;

执行结果如下图所示:
在这里插入图片描述

继续执行:

-- 找出 2020-08-02 的新用户select t1.id, t1.dt, t2.id, t2.dt
from t1 leftjoin t2 on t1.id=t2.id
where t1.dt="2020-08-02";select t1.id, t1.dt
from t1 leftjoin t2 on t1.id=t2.id
where t1.dt="2020-08-02"and t2.id isnull;

在这里插入图片描述
继续运行:

-- 将找到 2020-08-02 新用户数据插入t2表中insertintotable t2
select t1.id, t1.dt
from t1 leftjoin t2 on t1.id=t2.id
where t1.dt="2020-08-02"and t2.id isnull;

执行结果如下图所示:
在这里插入图片描述
目前t2的数据有:

hive (default)>select * from t2;
OK
t2.id   t2.dt
72020-08-02
82020-08-02
92020-08-02
12020-08-01
22020-08-01
32020-08-01
42020-08-01
52020-08-01
62020-08-01
Time taken: 0.137 seconds, Fetched: 9 row(s)
hive (default)>

我们继续加载新的数据进去,整体的思路如下:

-- t3.dat的数据,t1 加载 2020-08-03 的数据14,2020-08-0315,2020-08-0316,2020-08-0317,2020-08-0318,2020-08-0319,2020-08-03loaddatalocal inpath '/opt/wzk/hive/data/t3.dat'intotable t1;-- 同样的思路-- 将找到 2020-08-03 新用户数据插入t2表中insertintotable t2
select t1.id, t1.dt
from t1 leftjoin t2 on t1.id=t2.id
where t1.dt="2020-08-03"and t2.id isnull;-- 检查结果select*from t2;

执行结果如下图所示:
在这里插入图片描述

此时t2中的数据有:

hive (default)>select * from t2;
OK
t2.id   t2.dt
72020-08-02
82020-08-02
92020-08-02
142020-08-03
152020-08-03
162020-08-03
172020-08-03
182020-08-03
192020-08-03
12020-08-01
22020-08-01
32020-08-01
42020-08-01
52020-08-01
62020-08-01
Time taken: 0.115 seconds, Fetched: 15 row(s)
hive (default)>

DWS作用

统一数据模型

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

支持业务场景

满足企业对历史数据的查询和分析需求。
支持 OLAP(在线分析处理)操作,如聚合查询、钻取和切片。

数据细化与分类

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

数据准确性与一致性

经过处理的数据经过校验,确保逻辑关系正确,能够为下游提供准确的一致性数据。

创建DWS层表

use dws;droptableifexists dws.dws_member_add_day;createtable dws.dws_member_add_day
(`device_id` string,`uid` string,`app_v` string,`os_type` string,`language` string,`channel` string,`area` string,`brand` string,`dt` string
)COMMENT'每日新增会员明细'
stored as parquet;

执行结果如下图所示:
在这里插入图片描述

加载DWS层数据

我们编写脚本:

vim /opt/wzk/hive/dws_load_member_add_day.sh

写入内容如下:

#!/bin/bashsource /etc/profile
if[ -n "$1"]thendo_date=$1elsedo_date=`date -d "-1 day" +%F`fisql="
insert into table dws.dws_member_add_day
select t1.device_id,
t1.uid,
t1.app_v,
t1.os_type,
t1.language,
t1.channel,
t1.area,
t1.brand,
'$do_date'
from dws.dws_member_start_day t1 left join
dws.dws_member_add_day t2
on t1.device_id=t2.device_id
where t1.dt='$do_date'
and t2.device_id is null;
"
hive -e "$sql"

写入的内容如下图所示:
在这里插入图片描述

ADS 作用

聚合和简化数据

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

面向业务应用

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

数据分发与集成

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

轻量化与高性能

尽量减少数据量,保留业务最关心的关键指标。
采用预聚合、预计算等技术提升查询效率。

创建ADS层表

droptableifexists ads.ads_new_member_cnt;createtable ads.ads_new_member_cnt(`cnt` string
)
partitioned by(dt string)row format delimited fieldsterminatedby',';

执行结果如下图所示:
在这里插入图片描述

加载ADS层数据

编写数据加载的脚本:

vim /opt/wzk/hive/ads_load_member_add.sh

编写对应的脚本如下所示:

#!/bin/bash
source /etc/profile
if[-n "$1"];then
do_date=$1else
do_date=`date-d "-1 day"+%F`
fi
sql="
insert overwrite table ads.ads_new_member_cnt
partition (dt='$do_date')
select count(1)
from dws.dws_member_add_day
where dt = '$do_date'
"
hive -e "$sql"

暂时小结

在这里插入图片描述
调用脚本的次序是:

dws_load_member_add_day.sh
ads_load_member_add.sh
标签: 大数据 hive hadoop

本文转载自: https://blog.csdn.net/w776341482/article/details/143986961
版权归原作者 武子康 所有, 如有侵权,请联系我们删除。

“大数据-232 离线数仓 - 新增会员 需求、创建与加载DWS 层、ADS 层 与 小结”的评论:

还没有评论