一、数仓分层概念

1、为什么要分层

ODS:原始数据层

DWD层:明细数据层

DWS:服务数据层

ADS:数据应用层

2、数仓分层

3、数据集市与数据仓库概念 

4、数仓命名规范

ODS层命名为ods
DWD层命名为dwd
DWS层命名为dws
ADS层命名为ads
临时表数据库命名为xxx_tmp
备份数据数据库命名为xxx_bak

二、数仓环境搭建

1、Hive&MySQL安装

修改hive-site.xml,关闭元数据检查

设置元数据备份:每日零点之后备份到其它服务器两个

2、Hive运行引擎Tez

Hive的运行引擎,性能优于MR(用Hive直接编写MR程序,需要将中间结果持久化写到HDFS)

Tez可以将多个有依赖的作业转换为一个作业

Hive中配置Tez:/opt/module/hive/conf下面创建一个tez-site.xml文件

hive-env.sh文件中添加tez环境变量配置和依赖包环境变量配置

[atguigu@hadoop102 hive]$ bin/hive启动、创建、插入测试

三、数仓搭建之ODS层

1、创建数据库

create database gmall;

2、ODS层

支持LZO压缩配置:将编译好后的hadoop-lzo-0.4.20.jar 放入hadoop-2.7.2/share/hadoop/common/

core-site.xml增加配置支持LZO压缩

同步core-site.xml

创建lzo文件的索引,lzo压缩文件的可切片特性依赖于其索引

hadoop jar /opt/module/hadoop-2.7.2/share/hadoop/common/hadoop-lzo-0.4.20.jar com.hadoop.compression.lzo.DistributedLzoIndexer /user/hive/warehouse/bigtable

建完索引时,查询时map个数变多

启动日志表ods_start_log创建,需要创建索引

创建事件日志表ods_event_log

Shell中单引号和双引号区别

(1)单引号不取变量值
(2)双引号取变量值
(3)反引号,执行引号中命令
(4)双引号内部嵌套单引号,取出变量值
(5)单引号内部嵌套双引号,不取出变量值

ODS层加载数据脚本(加载数据&加索引)

load data inpath '/origin_data/gmall/log/topic_event/$do_date' into table "$APP".ods_event_log partition(dt='$do_date');

$hadoop jar /opt/module/hadoop-2.7.2/share/hadoop/common/hadoop-lzo-0.4.20.jar com.hadoop.compression.lzo.DistributedLzoIndexer /warehouse/gmall/ods/ods_start_log/dt=$do_date

四、数仓搭建之DWD层

对ODS层数据进行清洗(去除空值,脏数据,超过极限范围的数据,行式存储改为列存储,改压缩格式)

1、启动表

创建、导入数据、编写加载数据脚本,传递日期参数

2、DWD层事件表

基础明细表:存储明细数据

UDF和UDTF:

自定义UDF函数(解析公共字段)

自定义UDTF函数(解析具体事件字段)-获取事件、遍历、得到结果并返回

创建永久函数与开发好的java class关联

3、DWD层事件表获取

新添加字段

`entry` string,
`action` string,
`goodsid` string,
`showtype` string,
`news_staytime` string,
`loading_time` string,
`type1` string,
`category` string,

基础明细表:导入数据时调用编写的方法get_json_object(event_json,'$.kv.loading_way')

商品点击表

商品详情页表

商品列表页表

广告表

获取json信息并加入

事件表加载数据脚本

五、业务知识准备

1、业务术语

活跃用户

沉默用户

版本分布

流失用户

留存用户

使用时长

2、系统函数

collect_set函数:把同一分组的不同行的数据聚合成一个集合

hive (gmall)> select course, collect_set(area), avg(score) from stud group by course;
chinese ["sh","bj"] 79.0
math ["bj"] 93.5

日期处理函数(datediff):date_format、date_add、next_day、last_day

当前周的周一:date_add(next_day('2019-02-12','MO'),-7)

3、需求实施流程

业务口径、技术口径、原型设计和评审、模型设计(分层建模)、数据开发、前后端开发、联调、测试、上线

以用户活跃需求为例,ods层需要存放start_log(启动日志),dwd层需要对数据进行清洗、过滤,dws层需要对数据进行轻度聚合,ads层需要得出最终统计指标的结果

六、需求一:用户活跃主题

1、DWS层
目标:统计当日(dau)、当周、当月活动的每个设备明细

以用户单日访问为key进行聚合group by mid_id;【`mid_id` string COMMENT '设备唯一标识'】

周活跃明细:

导入数据

date_add(next_day('2019-12-14','MO'),-7),
date_add(next_day('2019-12-14','MO'),-1),
concat(date_add( next_day('2019-12-14','MO'),-7), '_' , date_add(next_day('2019-12-14','MO'),-1)
)

月活跃设备明细

2、ADS层

活跃设备数,加字段

hive (gmall)>
drop table if exists ads_uv_count;
create external table ads_uv_count(
    `dt` string COMMENT '统计日期',
    `day_count` bigint COMMENT '当日用户数量',
    `wk_count` bigint COMMENT '当周用户数量',
    `mn_count` bigint COMMENT '当月用户数量',
    `is_weekend` string COMMENT 'Y,N是否是周末,用于得到本周最终结果',
    `is_monthend` string COMMENT 'Y,N是否是月末,用于得到本月最终结果'
) COMMENT '活跃设备数'
row format delimited fields terminated by '\t'
location '/warehouse/gmall/ads/ads_uv_count/';

七、用户新增主题

1、DWS:每日新增设备明细表

2、ADS层(每日新增设备表)

八、用户留存主题

1、需求目标

2、DWS层

DWS层(每日留存用户明细表)

DWS层(1,2,3,n天留存用户明细表)

from dws_uv_detail_day ud join dws_new_mid_day nm  on ud.mid_id =nm.mid_id
where ud.dt='2019-02-11' and nm.create_date=date_add('2019-02-11',-1) union all

(1)union会将联合的结果集去重,效率较union all差
(2)union all不会对结果集去重,所以效率高

3、ADS层:留存用户数

hive (gmall)>
drop table if exists ads_user_retention_day_count;
create external table ads_user_retention_day_count
(
   `create_date`       string comment '设备新增日期',
   `retention_day`     int comment '截止当前日期留存天数',
   `retention_count` bigint comment '留存数量'
) COMMENT '每日用户留存情况'
row format delimited fields terminated by '\t'
location '/warehouse/gmall/ads/ads_user_retention_day_count/';

留存用户比率

九、新数据准备

分析沉默用户、本周回流用户数、流失用户、最近连续3周活跃用户、最近七天内连续三天活跃用户数,需要准备2019-02-12、2019-02-20日的数据

十、沉默用户数

沉默用户:指的是只在安装当天启动过,且启动时间是在一周前

……

十一、总结

1、用户行为数仓业务总结

1)ODS层(原始数据层)
存储原始数据,直接加载原始日志、数据,数据保持原貌不做处理。
2)DWD层(明细层)
对ODS层数据进行清洗(去除空值、脏数据,超过极限范围的数据)
3)DWS层(服务数据层)
以DWD层为基础,进行轻度汇总。比如:用户当日、设备当日、商品当日。
4)ADS层(数据应用层)

2、Tez优点:将多个有依赖的作业转换为一个作业,这样只需写一次HDFS,且中间节点较少,从而大大提升作业的计算性能。

2、在项目中是否自定义过UDF、UDTF函数,以及用他们处理了什么问题?

自定义过。
用UDF函数解析公共字段;用UDTF函数解析事件字段。

21.1.5 如何分析用户新增
用活跃用户表 left join 用户新增表,用户新增表中mid为空的即为用户新增。
21.1.6 如何分析用户1天留存
留存用户=前一天新增 join 今天活跃
用户留存率=留存用户/前一天新增
21.1.7 如何分析沉默用户?
按照设备id对日活表分组,登录次数为1,且是在一周前登录。
21.1.8 如何分析本周回流用户
本周活跃left join本周新增 left join上周活跃,且本周新增id和上周活跃id都为null
21.1.9 如何分析流失用户?
按照设备id对日活表分组,且七天内没有登录过。
21.1.10 如何分析最近连续3周活跃用户数?
按照设备id对周活进行分组,统计次数等于3次。
21.1.11 如何分析最近七天内连续三天活跃用户数?
1)查询出最近7天的活跃用户,并对用户活跃日期进行排名
2)计算用户活跃日期及排名之间的差值
3)对同用户及差值分组,统计差值个数
4)将差值相同个数大于等于3的数据取出,然后去重,即为连续3天及以上活跃的用户

整个文档中涉及的所有层级及表

3、hive总结

窗口函数、排序函数

hive优化:分桶、小文件合并、map和reduce数量设置

常用参数设置

【离线数仓】Day02-用户行为数据仓库:分层介绍、环境搭建(hive、tez)、LZO压缩、建表查询导入加索引、编写脚本的更多相关文章

  1. 技术专家说 | 如何基于 Spark 和 Z-Order 实现企业级离线数仓降本提效?

    [点击了解更多大数据知识] 市场的变幻,政策的完善,技术的革新--种种因素让我们面对太多的挑战,这仍需我们不断探索.克服. 今年,网易数帆将持续推出新栏目「金融专家说」「技术专家说」「产品专家说」等, ...

  2. 数仓day02

    1. 什么是ETL,ETL都是怎么实现的? ETL中文全称为:抽取.转换.加载  extract   transform  load ETL是传数仓开发中的一个重要环节.它指的是,ETL负责将分布的. ...

  3. 数仓建模—建模工具PdMan(CHINER)介绍

    数据仓库系列文章(持续更新) 数仓架构发展史 数仓建模方法论 数仓建模分层理论 数仓建模-宽表的设计 数仓建模-指标体系 数据仓库之拉链表 数仓-数据集成 数仓-数据集市 数仓-商业智能系统 数仓-埋 ...

  4. 【Hadoop离线基础总结】CDH版本Hadoop 伪分布式环境搭建

    CDH版本Hadoop 伪分布式环境搭建 服务规划 步骤 第一步:上传压缩包并解压 cd /export/softwares/ tar -zxvf hadoop-2.6.0-cdh5.14.0.tar ...

  5. 数仓1.1 分层| ODS& DWD层

    数仓分层 ODS:Operation Data Store原始数据 DWD(数据清洗/DWI) data warehouse detail数据明细详情,去除空值,脏数据,超过极限范围的明细解析具体表 ...

  6. 看SparkSql如何支撑企业数仓

    企业级数仓架构设计与选型的时候需要从开发的便利性.生态.解耦程度.性能. 安全这几个纬度思考.本文作者:惊帆 来自于数据平台 EMR 团队 前言 Apache Hive 经过多年的发展,目前基本已经成 ...

  7. 基于MaxCompute的数仓数据质量管理

    声明 本文中介绍的非功能性规范均为建议性规范,产品功能无强制,仅供指导. 参考文献 <大数据之路——阿里巴巴大数据实践>——阿里巴巴数据技术及产品部 著. 背景及目的 数据对一个企业来说已 ...

  8. 传统 BI 如何转大数据数仓

    前几天建了一个数据仓库方向的小群,收集了大家的一些问题,其中有个问题,一哥很想去谈一谈--现在做传统数仓,如何快速转到大数据数据呢?其实一哥知道的很多同事都是从传统数据仓库转到大数据的,今天就结合身边 ...

  9. 数仓Hive和分布式计算引擎Spark多整合方式实战和调优方向

    @ 目录 概述 Spark on Hive Hive on Spark 概述 编译Spark源码 配置 调优思路 编程方向 分组聚合优化 join优化 数据倾斜 任务并行度 小文件合并 CBO 谓词下 ...

  10. 数据仓库(5)数仓Kimball与Inmon架构的对比

    数据仓库主要有四种架构,Kimball的DW/BI架构.独立数据集市架构.辐射状企业信息工厂Inmon架构.混合Inmon与Kimball架构.不过不管是那种架构,基本上都会使用到维度建模. < ...

随机推荐

  1. Dockerfile中ADD命令详细解读

    ADD指令的功能是将主机构建环境(上下文)目录中的文件和目录.以及一个URL标记的文件 拷贝到镜像中. 其格式是: ADD 源路径 目标路径 #test FROM ubuntu MAINTAINER ...

  2. ProxySQL(4):多层配置系统

    文章转载自:https://www.cnblogs.com/f-ck-need-u/p/9280793.html ProxySQL中的库 使用ProxySQL的Admin管理接口连上ProxySQL, ...

  3. Beats:使用 Elastic Stack 记录 Python 应用日志

    文章转载自:https://elasticstack.blog.csdn.net/article/details/112259500 日志记录实际上是每个应用程序都必须具备的功能.无论你选择基于哪种技 ...

  4. 10. Fluentd部署:高可用配置

    对于高访问量的web站点或者服务,可以采用Fluentd的高可用配置模式. 消息分发语义 Fluentd设计初衷主要是用作事件日志分发系统的.这类系统支持几种不同的分发模式: 至多一次.消息被立即发送 ...

  5. CSP-J2020 洛谷P7072 直播获奖(Splay/桶排序)

    题目描述 NOI2130 即将举行.为了增加观赏性,CCF 决定逐一评出每个选手的成绩,并直播即时的获奖分数线.本次竞赛的获奖率为 w%,即当前排名前 w% 的选手的最低成绩就是即时的分数线. 更具体 ...

  6. vue+element-ui后台管理系统模板

    vue+element-ui后台管理系统模板 前端:基于vue2.0+或3.0+加上element-ui组件框架 后端:springboot+mybatis-plus写接口 通过Axios调用接口完成 ...

  7. echarts在Vue项目中的实际运用效果图

    文章目录 1.在后台系统首页中.可以根据需求制作相应的图表 2.在Vue中使用echarts的详细过程参照这个链接 1.在后台系统首页中.可以根据需求制作相应的图表 2.在Vue中使用echarts的 ...

  8. 齐博x1嵌套-循环栏目,并列出子栏目下的内容

    嵌套,循环栏目,并列出子栏目下的内容. 代码如下: <div class="channel-list"> <div class="row"&g ...

  9. 靶机: medium_socnet

    靶机: medium_socnet 准备工作 需要你确定的事情: 确定 kali 已经安装,并且能正常使用[本文不涉及 kali 安装配置] VirtualBox 以前能正常导入虚拟文件 ova 能正 ...

  10. 13-ORM-更新&删除

    一.更改单个数据 修改单个实体的某些字段 1.查: - 通过get()得到要修改的实体对象 2.改: - 通过对象属性的=的方式修改数据 3.保存 - 通过对象.save()保存数据     二.批量 ...