数据质量

The Challenges of Data Quality and Data Quality Assessment in the Big Data Era

https://pdfs.semanticscholar.org/0fb3/7330a4170ec63d60eec7dbb2b86e6829a3de.pdf

A Data Quality in Use model for Big Data

Automating LargeScale Data Quality Verification

Data Sets and Data Quality in Software Engineering

Discovering Data Quality Rules

Context-aware Data Quality Assessment for Big Data

元数据管理

元数据

https://www.ruanyifeng.com/blog/2007/03/metadata.html#

https://dataedo.com/kb/data-glossary/what-is-metadata

https://www.cnblogs.com/alight/p/3982086.html

Metadata is simply data about data. It means it is a description and context of the data. It helps to organize, find and understand data. Here are a few real world examples of metadata:

Those are some typical metadata elements:

  1. Title and description
  2. Tags and categories
  3. Who created and when
  4. Who last modified and when
  5. Who can access or update

元数据管理

https://zhuanlan.zhihu.com/p/336504407

元数据管理工具

atlas

hive

即席查询(Ad hoc)

定义

即席查询(Ad Hoc)是用户根据自己的需求,灵活的选择查询条件,系统能够根据用户的选择生成相应的统计报表。即席查询与普通应用查询最大的不同是普通的应用查询是定制开发的,而即席查询是由用户自定义查询条件的。

举例说明

以电商的数仓分析项目为例,有一些应用侧/业务侧的分析指标:每日活跃用户数(日活),每日留存用户数(留存),新注册用户有多少下了单(转换率),因为计算方法固定,变化的是每天的数据,因此这些指标的查询/计算SQL是提前写好的,到店被调度(Azkaban)执行即可;

但有一些指标或者临时增加的指标、临时增加的一些分析需求,是无法预知其计算逻辑的,所以要现写查询SQL,并且希望能很快拿到查询/计算结果,这就是即席查询

工具

Kylin、druid、presto、impala

https://zhuanlan.zhihu.com/p/266695601

离线数仓搭建例子(电商为例)

0 架构

1.数据来源

1.1 用户行为数据

用户在使用产品过程中,通过埋点收集与客户端产品交互过程中产生的数据,并发往日志服务器进行保存。比如页面浏览、点击、停留、评论、点赞、收藏等。用户行为数据通常存储在日志文件中。

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

普通页面日志结构如下,每条日志包含了,当前页面的页面信息,所有事件(动作)、所有曝光信息以及错误信息。除此之外,还包含了一系列公共信息,包括设备信息,地理位置,应用信息等,即下边的common字段。

启动日志结构相对简单,主要包含公共信息,启动信息和错误信息。

1.2 业务数据

就是各行业在处理事务过程中产生的数据。比如用户在电商网站中登录、下单、支付等过程中,需要和网站后台数据库进行增删改查交互,产生的数据就是业务数据业务数据通常存储在MySQL、Oracle等数据库中。

总共47张表,选了27张业务表

2 数据采集

1 用户行为数据

jar-》log(日志服务器)-》flume-》kafka-》flume-》hdfs

2 业务数据

jar-》mysql-》sqoop-》hdfs

3.ODS

hdfs(ori)-》hdfs(ods)

1 用户行为数据

1张表,topic_log -> ods_log

a.建表

就一个字段”line“

b 分区

首日,每日都是全量

c .数据装载

2 业务数据

27张表

0 整体

​ b 同步

​ c .数据装载

1.活动信息表

​ activity_info -> ods_activity_info

​ a 建表

​ 少了个“activity_desc”,多了”dt”

​ b 同步

​ 首日,每日都是全量

​ c .数据装载

4.DIM

hdfs(ods)-》hdfs(dim)

构建6张维度表

1 商品维度表

​ a 建表

​ b 分区

​ 首日,每日都是全量

​ c 数据装载

2 优惠券维度表

3 活动维度表

4 地区维度表

​ b 分区

​ 地区维度表数据相对稳定,变化概率较低,故无需每日装载,首日全量

5 时间维度表

​ b 分区

​ 通常情况下,时间维度表的数据并不是来自于业务系统,而是手动写入,并且时间维度表数据具有可预见性,无须每日导入,一般首日可一次性导入一年的数据

​ c 数据装载

​ 1)创建临时表tmp_dim_date_info

​ 2)将数据文件上传到HFDS上临时表指定路径/warehouse/gmall/tmp/tmp_dim_date_info/

​ 3)执行以下语句将其导入时间维度表

1
insert overwrite table dim_date_info select * from tmp_dim_date_info;

6 用户维度表

​ b 分区

​ 拉链表

https://cloud.tencent.com/developer/article/1752848#

​ c 数据装载

5.DWD

hdfs(ods)-》hdfs(dwd)

1 用户行为日志

0 日志数据拆解

ods_log由两部分构成,分别为页面日志和启动日志,拆解成5张表

1 启动日志表

​ b 分区

​ 首日,每日全量

​ c 数据装载

2 页面日志表

3 动作日志表

4 曝光日志表

5 错误日志表

2 业务数据

1 评价事实表(事务型事实表)

​ b 分区

​ c 数据装载

​ 首日,动态分区;每日,静态分区

2 订单明细事实表(事务型事实表)

3 退单事实表(事务型事实表)

4 加购事实表(周期型快照事实表)

​ b 分区

​ c 数据加载

5 收藏事实表(周期型快照事实表)

6 优惠券领用事实表(累积型快照事实表)

​ b 分区

​ c 数据加载

​ (1)首日

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
insert overwrite table dwd_coupon_use partition(dt)
select
id,
coupon_id,
user_id,
order_id,
coupon_status,
get_time,
using_time,
used_time,
expire_time,
coalesce(date_format(used_time,'yyyy-MM-dd'),date_format(expire_time,'yyyy-MM-dd'),'9999-99-99')
from ods_coupon_use
where dt='2020-06-14';

​ (2)每日

7 支付事实表(累积型快照事实表)

8 退款事实表(累积型快照事实表)

9 订单事实表(累积型快照事实表)

6.DWS

hdfs(dwd)-》hdfs(dws)

0 整体

​ b 分区

​ c 数据装载

1 访客主题

2 用户主题

3 商品主题

4 优惠券主题

5 活动主题

6 地区主题

7.DWT

hdfs(dws)-》hdfs(DWT)

0 整体

c 数据装载

只保留当天和前一天的分区,过时的需要清理掉i

1 访客主题

2 用户主题

3 商品主题

4 优惠券主题

5 活动主题

6 地区主题

8.ADS

hdfs(DWT)-》hdfs(ADS)-》mysql

1 访客主题

1 访客统计

a 建表

指标 说明 对应字段
访客数 统计访问人数 uv_count
页面停留时长 统计所有页面访问记录总时长,以秒为单位 duration_sec
平均页面停留时长 统计每个会话平均停留时长,以秒为单位 avg_duration_sec
页面浏览总数 统计所有页面访问记录总数 page_count
平均页面浏览数 统计每个会话平均浏览页面数 avg_page_count
会话总数 统计会话总数 sv_count
跳出数 统计只浏览一个页面的会话个数 bounce_count
跳出率 只有一个页面的会话的比例 bounce_rate

b 分区

c 数据装载

第一步:对所有页面访问记录进行会话的划分。

第二步:统计每个会话的浏览时长和浏览页面数。

第三步:统计上述各指标。

2 路径分析

用户访问路径的可视化通常使用桑基图

2 用户主题

3 商品主题

4 订单主题

5 优惠券主题

6 活动主题

9.Azkaban全流程调度

就是将原来写的脚本文件串起来

数仓建模

关系建模和维度建模是两种数据仓库的建模技术。关系建模由Bill Inmon所倡导,维度建模由Ralph Kimball所倡导。目前主流为维度建模。

https://zhuanlan.zhihu.com/p/362991213

1.关系建模(范式建模)

1.1 范式

1 目的

降低数据的冗余性

2 目前业界范式

第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、巴斯-科德范式(BCNF)、第四范式(4NF)、第五范式(5NF)。逐个遵循,一般要求遵循第一,第二,第三范式,也就是三范式。

https://blog.csdn.net/Dream_angel_Z/article/details/45175621

1.2 建模

1 建模

关系建模将复杂的数据抽象为两个概念——实体和关系(实体表,关系表),并使用规范化(三范式)的方式表示出来

2 特点

关系模型严格遵循第三范式(3NF),数据冗余程度低,数据的一致性容易得到保证。

由于数据分布于众多的表中,查询会相对复杂,在大数据的场景下,查询效率相对较低。

2.维度建模

https://www.jianshu.com/p/daab50a23c56

https://cloud.tencent.com/developer/article/1772027

2.1 事实表和维度表

1 事实表

存储业务事实,事实表中的每行数据代表一个业务事件(下单、支付、退款、评价等)。

事实表的特征:

​ 内容相对的窄:列数较少(主要是外键id和度量值)

​ 非常的大

​ 经常发生变化,每天会新增加很多。

分类:事务型事实表,周期型快照事实表,累积型快照事实表

2 维度表

维度表:一般是对事实的描述信息。每一张维表对应现实世界中的一个对象或者概念。 例如:用户、商品、日期、地区等。

维表的特征:

​ 维表的范围很宽(具有多个属性、列比较多)

​ 跟事实表相比,行数相对较小:通常< 10万条

​ 内容相对固定:编码表

2.2 维度模型分类

在维度建模的基础上又分为三种模型:星型模型、雪花模型、星座模型。

星座模型是多个星型模型交织

2.3 建模

1 建模

维度模型面向业务,将业务用事实表和维度表呈现出来。

步骤:

https://www.cnblogs.com/suheng01/p/13522677.html

选择业务过程→声明粒度→确认维度→确认事实

2 特点

维度模型以数据分析作为出发点,不遵循三范式,故数据存在一定的冗余。

表结构简单,故查询简单,查询效率较高。

数仓分层

https://blog.csdn.net/BeiisBei/article/details/105723188#_19

https://www.saoniuhuo.com/article/detail-72.html

https://www.dianjilingqu.com/20890.html

https://www.i4k.xyz/article/wjt199866/115184169#ODS__100

1.为什么要分层

1.清晰数据结构:每一个数据分层都有它的作用域,这样我们在使用表的时候能更方便地定位和理解。
2.数据血缘追踪:简单来讲可以这样理解,我们最终给业务呈现的是一张能直接使用的张业务表,但是它的来源有很多,如果有一张来 源表出问题了,我们希望能够快速准确地定位到问题,并清楚它的危害范围。
3.减少重复开发:规范数据分层,开发一些通用的中间层数据,能够减少极大的重复计算。
4.把复杂问题简单化:将一个复杂的任务分解成多个步骤来完成,每一层只处理单一的步骤,比较简单和容易理解。而且便于维护数据的准确性,当数据出现问题之后,可以不用修复所有的数据,只需要从有问题的步骤开始修复。
5.屏蔽原始数据的异常:屏蔽业务的影响,不必改一次业务就需要重新接入数据。

2.分层结构

2.1 ODS层

作用

https://blog.csdn.net/xuebo_911/article/details/8156016#

起到备份数据的作用

构建

1 直接加载原始日志、数据,保持原貌不做处理

2.2 DIM层

dim存放维度表,dwd存放事实表

作用

维度表可以看作是用户来分析数据的窗口,维度表中包含事实数据表中事实记录的特性,有些特性提供描述性信息,有些特性指定如何汇总事实数据表数据,以便为分析者提供有用的信息,维度表包含帮助汇总数据的特性的层次结构。

构建

https://help.aliyun.com/document_detail/137615.html

1 构建维度表,主要是对业务事实的描述信息,例如何人,何时,何地等

2.3 DWD层

作用

保存业务事实明细,一行信息代表一次业务行为,例如一次下单。

构建

1 对ODS层数据进行清洗(去除空值,脏数据,超过极限范围的数据、脱敏等)

2 构建事实表

https://help.aliyun.com/document_detail/114457.html

2.4 DWS

作用

避免重复计算

1)问题引出

两个需求,统计每个省份订单的个数、统计每个省份订单的总金额,都是将省份表和订单表进行join,group by省份,然后计算。同样数据被计算了两次,实际上类似的场景还会更多。

2) 那怎么设计能避免重复计算呢?

针对上述场景,可以设计一张地区宽表,其主键为地区ID,字段包含为:下单次数、下单金额、支付次数、支付金额等。上述所有指标都统一进行计算,并将结果保存在该宽表中,这样就能有效避免数据的重复计算。

构建

https://help.aliyun.com/document_detail/126913.html

0 分主题

1 构建宽表

2 以DWD为基础,按天进行轻度汇总。DWS层存放的所有主题对象当天的汇总行为,例如每个地区当天的下单次数,下单金额等

2.5 DWT

和DWS区别

DWS按天进行轻度汇总,DWT累积汇总

作用

避免重复计算

构建

0 分主题

1 构建宽表

2 以DWS为基础,对数据进行累积汇总。DWT层存放的是所有主题对象的累积行为,例如每个地区最近7天(15天、30天、60天)的下单次数、下单金额等

2.6 ADS层

作用

为各种统计报表提供数据

构建

1 由于这层的数据量不大,所有没有分区,列式存储,压缩

3.构建过程

借助hive,主要就是写SQL,核心步骤就是:

1.建表

2.分区规划

​ 按什么分区,比如说按天,按月

​ 注意数据同步策略,全量,增量等

3.数据装载

​ 注意首日,每日

联系业务和不同层的要求

4.全流程调度

Azkaban


:D 一言句子获取中...