热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

【离线数仓】Day03系统业务数据仓库:数仓表概念、搭建、数据导入、数据可视化、Azkaban全调度、拉链表的使用...

一、电商业务与数据结构简介1、业务流程2、常识:SKUSPUSKUStockKeepingUnit(库存量基本单位)。现在已经被引申为产品统一编号的简称,

 一、电商业务与数据结构简介

1、业务流程

 2、常识:SKU/SPU

SKU=Stock Keeping Unit(库存量基本单位)。现在已经被引申为产品统一编号的简称,每种产品均对应有唯一的SKU号。
SPU(Standard Product Unit):是商品信息聚合的最小单位,是一组可复用、易检索的标准化信息集合。

3、电商表结构

 二、数仓理论

1、表的分类

实体表

维度表:对应一些业务状态,编号的解释表。也可以称之为码表,比如地区表,订单状态,支付方式,审批状态,商品分类等等

事务型事实表:一旦发生不会再变化,如,交易流水,操作日志,出库入库记录等等

周期型事实表,一般指随着业务发生不断产生变化(更新, 新增)的数据。比如订单,其中订单状态会周期性变化。再比如,请假、贷款申请,随着批复状态在周期性变化。

2、同步策略

全量表:存储完整的数据。

增量表:存储新增加的数据。

新增及变化表:存储新增加的数据和变化的数据。

拉链表:对新增及变化表做定期合并

---------------------

实体表:每日全量

维度表:每日全量

事务型事实表:增量表

周期型事实表:拉链表

name姓名

start新名字创建时间

end名字更改时间

张三

1990/1/1

2018/12/31

张小三

2019/1/1

2019/4/30

张大三

2019/5/1

9999-99-99

。。。

。。。

。。。

select * from user where start &#61;<’2019-1-2’ and end>&#61;’2019-1-2’

3、范式

4、关系建模与维度建模

关系模型&#xff1a;OLTP&#xff0c;多表关联降低执行效率

维度模型&#xff1a;OLAP&#xff0c;所有维度表围绕着事实表进行解释

5、雪花模型、星型模型和星座模型

  

 三、数仓搭建

1、配置Hadoop支持Snappy压缩

解压缩上传至/opt/module/hadoop-2.7.2/lib/native

检查压缩方式&#xff1a;hadoop checknative

2、业务数据生成

MySQL建库gmall&#xff0c;建表

执行生成业务数据函数&#xff1a;init_data ( do_date_string VARCHAR(20) , order_incr_num INT, user_incr_num INT , sku_num INT , if_truncate BOOLEAN  )&#xff1a;

需求&#xff1a;生成日期2019年2月10日数据、订单1000个、用户200个、商品sku300个、删除原始数据。

CALL init_data(&#39;2019-02-10&#39;,1000,200,300,TRUE);

2、数据导入数仓

sqoop导入命令

/opt/module/sqoop/bin/sqoop import \
--connect \
--username \
--password \
--target-dir \
--delete-target-dir \
--num-mappers \
--fields-terminated-by \
--query "$2" &#39; and $CONDITIONS;&#39;

各表的同步策略

Sqoop定时导入脚本&#xff1a;vim sqoop_import.sh【MySQL-hdfs】

生成某日数据&#xff1a;CALL init_data(&#39;2019-02-11&#39;,1000,200,300,TRUE);

3、ODS层

仿照业务数据库中的表字段&#xff0c;创建ODS层的表

数据导入脚本编写【hdfs-MySQL】

sql&#61;" load data inpath &#39;/origin_data/$APP/db/order_info/$do_date&#39; OVERWRITE into table "$APP".ods_order_info partition(dt&#61;&#39;$do_date&#39;);

4、DWD层

对ODS层数据进行判空过滤。对商品分类表进行维度退化(降维)

 insert overwrite table "$APP".dwd_order_info partition(dt)

select * from "$APP".ods_order_info 

where dt&#61;&#39;$do_date&#39; and id is not null;

insert overwrite table "$APP".dwd_sku_info partition(dt)
select sku.id,sku.spu_id,sku.price,sku.sku_name,sku.sku_desc,sku.weight,sku.tm_id,sku.category3_id,c2.id category2_id,c1.id category1_id,c3.name category3_name,c2.name category2_name,c1.name category1_name,sku.create_time,sku.dt
from"$APP".ods_sku_info sku
join "$APP".ods_base_category3 c3 on sku.category3_id&#61;c3.id join "$APP".ods_base_category2 c2 on c3.category2_id&#61;c2.id join "$APP".ods_base_category1 c1 on c2.category1_id&#61;c1.id
where sku.dt&#61;&#39;$do_date&#39; and c2.dt&#61;&#39;$do_date&#39;
and c3.dt&#61;&#39;$do_date&#39; and c1.dt&#61;&#39;$do_date&#39;
and sku.id is not null;
"$hive -e "$sql"

5、用户行为宽表

用户单日的行为聚合起来组成一张多列宽表&#xff0c;以便之后关联用户维度信息后进行

create external table dws_user_action
( user_id string comment &#39;用户 id&#39;,order_count bigint comment &#39;下单次数 &#39;,order_amount decimal(16,2) comment &#39;下单金额 &#39;,payment_count bigint comment &#39;支付次数&#39;,payment_amount decimal(16,2) comment &#39;支付金额 &#39;,comment_count bigint comment &#39;评论次数&#39;
) COMMENT &#39;每日用户行为宽表&#39;
PARTITIONED BY (&#96;dt&#96; string)
stored as parquet
location &#39;/warehouse/gmall/dws/dws_user_action/&#39;;

导入数据

insert overwrite table dws_user_action partition(dt&#61;&#39;2019-02-10&#39;)
selectuser_actions.user_id,sum(user_actions.order_count),sum(user_actions.order_amount),sum(user_actions.payment_count),sum(user_actions.payment_amount),sum(user_actions.comment_count)
from
(select

四、GMV成交总额

1、ADS层

 

 五、转化率之用户新鲜度及漏斗分析

1、转化率

 2、ADS层之新增用户占日活跃用户比率(用户新鲜度)

 十三、数据可视化

1、MySQL建表并插入数据

 

2、web查看

运行spring-boot-echarts-master程序

在web页面上查看显示结果

3、sqoop导出脚本

export_data() {
/opt/module/sqoop/bin/sqoop export \
--connect "jdbc:mysql://hadoop102:3306/${db_name}?useUnicode&#61;true&characterEncoding&#61;utf-8" \
--username root \
--password 000000 \
--table $1 \
--num-mappers 1 \
--export-dir /warehouse/$db_name/ads/$1 \
--input-fields-terminated-by "\t" \
--update-mode allowinsert \
--update-key $2 \
--input-null-string &#39;\\N&#39; \
--input-null-non-string &#39;\\N&#39;
}case $1 in"ads_uv_count")export_data "ads_uv_count" "dt"
;;"ads_user_action_convert_day") export_data "ads_user_action_convert_day" "dt"
;;"ads_gmv_sum_day")export_data "ads_gmv_sum_day" "dt"
;;"all")export_data "ads_uv_count" "dt"export_data "ads_user_action_convert_day" "dt"export_data "ads_gmv_sum_day" "dt"
;;
esac

十四、Azkaban调度器

1、GMV指标获取的全调度流程

编写Azkaban程序运行job

(1)import.job文件

type&#61;command

do_date&#61;${dt}

command&#61;/home/atguigu/bin/sqoop_import.sh all ${do_date}

(2)ods.job文件

type&#61;command

do_date&#61;${dt}

dependencies&#61;import

command&#61;/home/atguigu/bin/ods_db.sh ${do_date}

(3)dwd.job文件

type&#61;command

do_date&#61;${dt}

dependencies&#61;ods

command&#61;/home/atguigu/bin/dwd_db.sh ${do_date}

(4)dws.job文件

type&#61;command

do_date&#61;${dt}

dependencies&#61;dwd

command&#61;/home/atguigu/bin/dws_db_wide.sh ${do_date}

(5)ads.job文件

type&#61;command

do_date&#61;${dt}

dependencies&#61;dws

command&#61;/home/atguigu/bin/ads_db_gmv.sh ${do_date}

(6)export.job文件

type&#61;command

dependencies&#61;ads

command&#61;/home/atguigu/bin/sqoop_export.sh ads_gmv_sum_day

(7)将以上6个文件压缩成gmv-job.zip文件

创建Azkaban工程&#xff0c;并上传gmv-job.zip文件。

页面上创建工程执行gmv-job.zip任务&#xff0c;查看结果

十五、拉链表

1、使用

 2、形成过程

 

 3、制作过程

 制作当日变动数据(包括新增&#xff0c;修改)每日执行

2019-02-14日新增2条订单数据

CALL init_data(&#39;2019-02-14&#39;,2,5,10,TRUE);

步骤2&#xff1a;先合并变动信息&#xff0c;再追加新增信息&#xff0c;插入到临时表中

步骤3&#xff1a;把临时表覆盖给拉链表

hive (gmall)>
insert overwrite table dwd_order_info_his
select * from dwd_order_info_his_tmp;

十六、项目总结

1、熟悉8张表的业务字段

2、数仓理论

3、Sqoop参数

4、sqoop导出时的存储一致性、运行机制等问题

5、拉链表

1)通过关系型数据库的create time和operation time获取数据的新增和变化。

2)用临时拉链表解决Hive了中数据不能更新的问题。

6、Azkaban

1)每天集群运行多少job?

2)多个指标(200)*6&#61;1200(1000-2000个job)

3)每天集群运行多少个task? 1000*(5-8)&#61;5000多个

7、表关系


推荐阅读
  • Python正则表达式学习记录及常用方法
    本文记录了学习Python正则表达式的过程,介绍了re模块的常用方法re.search,并解释了rawstring的作用。正则表达式是一种方便检查字符串匹配模式的工具,通过本文的学习可以掌握Python中使用正则表达式的基本方法。 ... [详细]
  • Spring特性实现接口多类的动态调用详解
    本文详细介绍了如何使用Spring特性实现接口多类的动态调用。通过对Spring IoC容器的基础类BeanFactory和ApplicationContext的介绍,以及getBeansOfType方法的应用,解决了在实际工作中遇到的接口及多个实现类的问题。同时,文章还提到了SPI使用的不便之处,并介绍了借助ApplicationContext实现需求的方法。阅读本文,你将了解到Spring特性的实现原理和实际应用方式。 ... [详细]
  • 如何自行分析定位SAP BSP错误
    The“BSPtag”Imentionedintheblogtitlemeansforexamplethetagchtmlb:configCelleratorbelowwhichi ... [详细]
  • 生成式对抗网络模型综述摘要生成式对抗网络模型(GAN)是基于深度学习的一种强大的生成模型,可以应用于计算机视觉、自然语言处理、半监督学习等重要领域。生成式对抗网络 ... [详细]
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • 本文讨论了在Windows 8上安装gvim中插件时出现的错误加载问题。作者将EasyMotion插件放在了正确的位置,但加载时却出现了错误。作者提供了下载链接和之前放置插件的位置,并列出了出现的错误信息。 ... [详细]
  • 本文主要解析了Open judge C16H问题中涉及到的Magical Balls的快速幂和逆元算法,并给出了问题的解析和解决方法。详细介绍了问题的背景和规则,并给出了相应的算法解析和实现步骤。通过本文的解析,读者可以更好地理解和解决Open judge C16H问题中的Magical Balls部分。 ... [详细]
  • [译]技术公司十年经验的职场生涯回顾
    本文是一位在技术公司工作十年的职场人士对自己职业生涯的总结回顾。她的职业规划与众不同,令人深思又有趣。其中涉及到的内容有机器学习、创新创业以及引用了女性主义者在TED演讲中的部分讲义。文章表达了对职业生涯的愿望和希望,认为人类有能力不断改善自己。 ... [详细]
  • 在说Hibernate映射前,我们先来了解下对象关系映射ORM。ORM的实现思想就是将关系数据库中表的数据映射成对象,以对象的形式展现。这样开发人员就可以把对数据库的操作转化为对 ... [详细]
  • 知识图谱——机器大脑中的知识库
    本文介绍了知识图谱在机器大脑中的应用,以及搜索引擎在知识图谱方面的发展。以谷歌知识图谱为例,说明了知识图谱的智能化特点。通过搜索引擎用户可以获取更加智能化的答案,如搜索关键词"Marie Curie",会得到居里夫人的详细信息以及与之相关的历史人物。知识图谱的出现引起了搜索引擎行业的变革,不仅美国的微软必应,中国的百度、搜狗等搜索引擎公司也纷纷推出了自己的知识图谱。 ... [详细]
  • 本文详细介绍了MysqlDump和mysqldump进行全库备份的相关知识,包括备份命令的使用方法、my.cnf配置文件的设置、binlog日志的位置指定、增量恢复的方式以及适用于innodb引擎和myisam引擎的备份方法。对于需要进行数据库备份的用户来说,本文提供了一些有价值的参考内容。 ... [详细]
  • 本文介绍了如何使用C#制作Java+Mysql+Tomcat环境安装程序,实现一键式安装。通过将JDK、Mysql、Tomcat三者制作成一个安装包,解决了客户在安装软件时的复杂配置和繁琐问题,便于管理软件版本和系统集成。具体步骤包括配置JDK环境变量和安装Mysql服务,其中使用了MySQL Server 5.5社区版和my.ini文件。安装方法为通过命令行将目录转到mysql的bin目录下,执行mysqld --install MySQL5命令。 ... [详细]
  • Java在运行已编译完成的类时,是通过java虚拟机来装载和执行的,java虚拟机通过操作系统命令JAVA_HOMEbinjava–option来启 ... [详细]
  • MyBatis多表查询与动态SQL使用
    本文介绍了MyBatis多表查询与动态SQL的使用方法,包括一对一查询和一对多查询。同时还介绍了动态SQL的使用,包括if标签、trim标签、where标签、set标签和foreach标签的用法。文章还提供了相关的配置信息和示例代码。 ... [详细]
  • Python SQLAlchemy库的使用方法详解
    本文详细介绍了Python中使用SQLAlchemy库的方法。首先对SQLAlchemy进行了简介,包括其定义、适用的数据库类型等。然后讨论了SQLAlchemy提供的两种主要使用模式,即SQL表达式语言和ORM。针对不同的需求,给出了选择哪种模式的建议。最后,介绍了连接数据库的方法,包括创建SQLAlchemy引擎和执行SQL语句的接口。 ... [详细]
author-avatar
营在天下的世界_141
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有