数仓项目流程简单梳理

数仓搭建简易案例

一、源数据构建

此处为模拟方法,实际生产中不会用到

1、通过Java和Python生成模拟日志

JAVA:创建文件名;根据初始和截止日期算出要写多少个文件;for循环内用流写文件;写出;关闭流

  • 使用RandomAccessFile流,随机读写;
  • 使用Calendar和Date日期类配合使用,解决"日期+1"的问题;
  • 注意RandomAccessFile写出时的换行和中文乱码;

Python:和java思路一致

2、使用Excel模拟维度字段

方方格子、Char()、rand()函数

3、使用pymysql直接往MySQL里写数据

把行数据写在元组里,装到list里然后调用executemany方法传入sql和list

一次写入过多时,会造成内存溢出,pymysql是一次性写入然后commit

#!/usr/bin/env python
# -*- coding:utf-8 -*-
import pymysql
import datetime
import random

db = pymysql.connect(host="192.168.221.205",user="root",password="root",database="myshops")
cursor = db.cursor()

data_orderitems=list()
for i in range(1000):
    info = (i,i%4+1,1+random.randint(1,5000),random.randint(1,10))
    data_orderitems.append(info)

def insert_orderitems():
    tm = datetime.datetime.now()
    sql="insert into orderitems values (%s,%s,%s,%s)"
    cursor.executemany(sql, data_orderitems)
    db.commit()
    print(datetime.datetime.now()-tm)

if __name__ == '__main__':
    insert_orderitems()

4、使用jdbc往MySQL里写数据

单例模式,写一个实体类,创建对象,加到list里。

使用addbatch方法,在url上添加rewriteBatchedStatements=true参数,设置autocommit为false,然后每addbatch达到一定数量时手动提交一次,此方法效率更高,因为从一次insert提交变为自定义的几万条提交一次
参考文章:JDBC单例模式-insert海量数据时的效率优化

二、使用flume从Tomcat读取数据到hdfs上

source:spoolDir,指定文件夹目录

channel:file,需要设置检查点和文件存储目录

sink:hdfs,文件输出路径,可顺便使用时间正则自动生成;设置文件前缀;是否使用时间戳;事务批处理大小;文件类型;创建新文件的条件设置,大小、时间、数量三种模式;指定block副本数量。

执行flume命令:flume-ng

参考文章:flume日志收集

三、构建ODS层数据:创表脚本,导入脚本

1、写创建ods层表的脚本,然后另一个Sqoop脚本写执行hive脚本的命令以及从MySQL导入到Hive表的脚本

参考文章:实现MySQL数据全量迁移至Hive的简单脚本

2、使用pyspark将数据进行格式转换,初步清洗

  • SparkSession.build.master("").appName().enableHiveSupport.getOrCreatr
  • get_json_object()、json_tuple、when、instr
  • saveAsTable

参考文章:pyspark读取hive表解析json日志并写入hive表的简单案例

四、DWD层构建

基于ods层数据,创建常见维度表,分区表,存储格式为orc高度压缩

ODS层数据是近源层,基本上没做过大的格式或数据转换(一般仅对数据进行格式上的转换,比如说对json、URL等格式的日志文件,提取出列数据),因此在DWD层,我们会把数据做一定的整理和优化,并加入一些常用维度,比如说维度、地域等

  • 使用shell脚本生成日期维度表

参考文章:DWD层构建思路

五、根据需求,构建DWS层

日活、登陆情况、10日均线等,然可以用create as建表导入到DWS层

此层用hive窗口函数会比较多

--dws
drop database if exists dws_myshops cascade;
create database dws_myshops;
use dws_myshops;

-- 创建用户每日消费情况的轻聚合表
create table dws_userconsume as
select cd.fdate,cd.userid,nvl(cp.ordernum,0) ordernum,nvl(cp.cprice,0) cprice
from (
select u.userid,dt.* 
from (
select userid 
from dwd_myshops.dwd_orders 
group by userid
)u
cross join dwd_myshops.dwd_dates dt
)cd
left join (
select c.userid,count(distinct c.orderno) ordernum,c.orderdate,sum(c.saleprice) cprice 
from (
select o.orderdate,o.userid,o.orderstatus,g.goodid,o.orderno,(o.buynum*g.price) saleprice
from dwd_myshops.dwd_orders o 
inner join dwd_myshops.dwd_goods g on o.goodid=g.goodid
)c
group by c.userid,c.orderdate
) cp on cd.userid=cp.userid and cp.orderdate=cd.fdate;

-- 用户在15天内的消费情况
select fdate,userid,ordernum,cprice,
avg(cprice) over(distribute by userid sort by fdate rows between 14 preceding and current row) avgper15
from dws_myshops.dws_userconsume
where fdate>='2020-11-01';

六、把DWS层数据导入到MySQL

sqoop export的方式

create database mydemo;
use mydemo;
drop table if exists userconsume;
create table userconsume(
fdate varchar(50),
userid varchar(50),
ordernum varchar(50),
cprice varchar(50)
);
sqoop export \
--connect jdbc:mysql://192.168.221.200:3306/mydemo \
--username root \
--password kb10 \
--table userconsume \
--input-fields-terminated-by '\001' \
--fields-terminated-by ',' \
--export-dir /opt/software/hadoop/hive110/warehouse/dws_myshops.db/dws_userconsume
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
一、课程简介随着技术的飞速发展,经过多年的数据积累,各互联网公司已保存了海量的原始数据和各种业务数据,所以数据仓库技术是各大公司目前都需要着重发展投入的技术领域。数据仓库是面向分析的集成化数据环境,为企业所有决策制定过程,提供系统数据支持的战略集合。通过对数据仓库中数据的分析,可以帮助企业改进业务流程、控制成本、提高产品质量等。二、课程内容本次精心打造的数仓项目的课程,从项目架构的搭建,到数据采集模块的设计、数仓架构的设计、实战需求实现、即席查询的实现,我们针对国内目前广泛使用的Apache原生框架和CDH版本框架进行了分别介绍,Apache原生框架介绍中涉及到的技术框架包括Flume、Kafka、Sqoop、MySql、HDFS、Hive、Tez、Spark、Presto、Druid等,CDH版本框架讲解包括CM的安装部署、Hadoop、Zookeeper、Hive、Flume、Kafka、Oozie、Impala、HUE、Kudu、Spark的安装配置,透彻了解不同版本框架的区别联系,将大数据全生态系统前沿技术一网打尽。在过程中对大数据生态体系进行了系统的讲解,对实际企业数仓项目中可能涉及到的技术点都进行了深入的讲解和探讨。同时穿插了大量数仓基础理论知识,让你在掌握实战经验的同时能够打下坚实的理论基础。三、课程目标本课程以国内电商巨头实际业务应用场景为依托,对电商数仓的常见实战指标以及难点实战指标进行了详尽讲解,具体指标包括:每日、周、月活跃设备明细,留存用户比例,沉默用户、回流用户、流失用户统计,最近连续3周活跃用户统计,最近7天内连续3天活跃用户统计,GMV成交总额分析,转化率及漏斗分析,品牌复购率分析、订单表拉链表的设计等,让学生拥有更直观全面的实战经验。通过对本课程的学习,对数仓项目可以建立起清晰明确的概念,系统全面的掌握各项数仓项目技术,轻松应对各种数仓难题。四、课程亮点本课程结合国内多家企业实际项目经验,特别加入了项目架构模块,从集群规模的确定到框架版本选型以及服务器选型,手把手教你从零开始搭建大数据集群。并且总结大量项目实战中会遇到的问题,针对各个技术框架,均有调优实战经验,具体包括:常用Linux运维命令、Hadoop集群调优、Flume组件选型及性能优化、Kafka集群规模确认及关键参数调优。通过这部分学习,助学生迅速成长,获取前沿技术经验,从容解决实战问题。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值