精华内容
下载资源
问答
  • 数据仓库基本概念介绍
    千次阅读
    2019-02-22 18:40:28

    目录

    1、数据仓库所处环节

    操作层       

    数据仓库

    数据集市

    个体层

    2、数据仓库概念

    面向主题的       

    集成的

    随时间变化的

    非易失的

    3、一般架构

    STAGE层

     ODS层

    MDS层

    ADS层

     DIM层

    ETL调度系统

    元数据管理系统

    4、设计的两个重要问题

    1、 粒度

    2、 分区


    1、数据仓库所处环节

           在一个成体系、结构化的数据应用场景下,数据和处理有四个层次: 操作层、数据仓库层、部门/数据集市层、个体层。

    è¿éåå¾çæè¿°

    操作层
           

           操作层是指为具体业务提供实时响应的各个业务系统,比如常见的订单系统、ERP、用户中心等等具体业务系统,这些系统中的数据一般都是存入关系型数据库。它们是数据的来源。

    数据仓库


           数据仓库收集操作层各个业务系统中的数据,进行统一格式、统一计量单位,规整有序地组织在一起,为数据分析、数据挖掘等需求提供数据支持。

    数据集市


           部门/数据集市层是各个部门根据自己的数据分析需求,从数据仓库中抽取自己部门所关心的数据报表。

    个体层


           个体层中的不同角色个体有读取不同数据的权限。

    2、数据仓库概念


           数据仓库是一个面向主题的、集成的、非易失的、随时间变化的,用来支持管理人员决策的数据集合,数据仓库中包含了粒度化的企业数据。

    面向主题的
           

           数据仓库不同于传统的操作型系统,传统的操作型系统中的数据是围绕功能进行组织的,而数据仓库是针对于某一个主题进行分析数据用的,比如针对于销售主题、针对于客户主题等等。

    集成的


           不同产品或者系统中的数据是分散在各自系统中的,并且格式不一致、计量单位不一致。而数据仓库必须将多个分散的数据统一为一致的、无歧义的数据格式后,并解决了命名冲突、计量单位不一致等问题,然后将数据整合在一起,才能称这个数据仓库是集成的。

    随时间变化的


           数据仓库要体现出数据随时间变化的情况,并且可以反映在过去某一个时间点上数据是什么样子的,也就是随时间变化的含义。而传统的操作型系统,只能保存当前数据,体现当前的情况。

    非易失的


           非易失是指:数据一旦进入数据仓库,就不能再被改变了,当在操作型系统中把数据改变后,再进入数据仓库就会产生新的记录。这样数据仓库就保留了数据变化的轨迹。

    3、一般架构

    è¿éåå¾çæè¿°


    STAGE层


           业务系统的数据接入到数据仓库时,首先将业务数据仓储到STAGE层中,Stage层作为一个临时缓冲区,并屏蔽对业务系统的干扰。 
           STAGE层中的表结构和数据定义一般与业务系统保持一致。 
           Stage中的数据可以每次全量接入也可以每次增量接入,一般都有会数据老化的机制,不用长期保存。 
           Stage的数据不会对外部开放。

     ODS层


           ODS才是数据仓库真正意义上的基础数据,数据是被清洗过的,ODS层的数据是定义统一的、可以体现历史的、被长期保存的数据。 
           ODS层的数据粒度与Stage层数据粒度是一致的。 
           Stage层中的数据是完全形式的源数据,需要进行清洗才能进入ODS层,所以说ODS层是数据仓库格式规整的基础数据,为上层服务。

    MDS层


           MDS是数据仓库中间层,数据是以主题域划分的,并根据业务进行数据关联形成宽表,但是不对数据进行聚合处理,MDS层数据为数据仓库的上层的统计、分析、挖掘和应用提供直接支持。 
    MDS层的数据也可以执行一定的老化策略。

    ADS层


           ADS层是数据仓库的应用层,一般以业务线或者部门划分库。这一层可以为各个业务线创建一个数据库。 
    ADS层的数据是基于MDS层数据生成的业务报表数据,可以直接作为数据仓库的输出导出到外部的操作型系统中(MySQL、MSSQL、Hbase、Elasticsearch等)。

     DIM层


           DIM层是数据仓库数据中,各层公用的维度数据。比如:省市县数据。

    ETL调度系统


           对接入数据仓库的数据进行清洗、数据仓库各层间数据流转都需要大量的程序任务来操作,这些任务一般都是定时的,并且之间都是有前后依赖关系的,为了能保证任务的有序执行,就需要一个ETL调度系统来管理。

    元数据管理系统


           描述数据的数据叫做元数据,元数据信息一般包括表名、表描述信息、所在数据库、表结构、存储位置等基本信息,另外还有表之间的血缘关系信息、每天的增量信息、表结构修改记录信息等等。 
    数据仓库中有大量的表,元数据管理系统就是用来收集、存储、查询数据仓库中元数据的工具,这个系统为数据使用方提供了极大的便利。

    4、设计的两个重要问题


    1、 粒度


           粒度是指数据仓库中数据单元的细节程度或综合程度的级别。粒度会深刻地影响数据量的大小以及数据仓库的查询能力。 
    细节程度越高,粒度级别就越低,查询就越灵活;相反,细节程度越低,粒度级别就越高。 
           双重粒度: 
           双重粒度是存储两个粒度下的数据:一个是全量的细节数据;另一个是轻度综合的数据。

    2、 分区


           数据分区是指把数据分散到可独立处理的分离物理单元中去。恰当地进行分区可以给数据仓库带来多个方面的好处: 
    (1) 数据装载 (2) 数据访问 (3) 数据存档 (4) 数据删除 (5) 数据监控 (6) 数据存储
    --------------------- 

    备注:原文地址
     

    更多相关内容
  • 【大数据基础实践】(六)数据仓库Hive的基本操作

    千次阅读 多人点赞 2021-07-01 13:23:07
    数据仓库概念2. Hive简介2.1 简介2.2 特性2.3 生态系统3. Hive系统架构4. HQL转成MapReduce作业的原理4.1 join的实现原理4.2 group by的实现原理5. 实验练习5.1 环境配置5.1.1 HIVE5.1.2 MYSQL5.1.3 配置MySql为...

    1. 数据仓库概念

    数据仓库(Data Warehouse)是一个面向主题的(Subject Oriented)、集成的(Integrated)、相对稳定的(Non-Volatile)、反映历史变化(Time Variant)的数据集合,用于支持管理决策。

    在这里插入图片描述

    • 数据仓库与传统数据库本质区别

    数据仓库中的数据相对稳定,大部分情况下不会发变更,存储大量历史数据;
    传统数据库一般只存储某一时刻状态信息,不保存历史数据。

    2. Hive简介

    2.1 简介

    • Hive是一个构建于Hadoop顶层的数据仓库工具
    • 依赖分布式文件系统HDFS存储数据,依赖分布式并行计算模型MapReduce处理数据,本身不存储和处理数据(区别:传统数据仓库支持数据存储和处理分析)
    • 支持大规模数据存储、分析,具有良好的可扩展性
    • 定义了简单的类似SQL 的查询语言——HiveQL/HQL
    • 用户可以通过编写的HQL语句运行MapReduce任务
    • 可以很容易把原来构建在关系数据库上的数据仓库应用程序移植到Hadoop平台上
    • 是一个可以提供有效、合理、直观组织和使用数据的分析工具

    2.2 特性

    • 采用批处理方式处理海量数据
    1. Hive需要把HiveQL语句转换成MapReduce任务进行运行
    2. 数据仓库存储的是静态数据,对静态数据的分析适合采用批处理方式,不需要快速响应给出结果,而且数据本身也不会频繁变化
    • 提供适合数据仓库操作的工具
    1. Hive本身提供了一系列对数据进行提取、转换、加载(ETL)的工具,可以存储、查询和分析存储在Hadoop中的大规模数据
    2. 这些工具能够很好地满足数据仓库各种应用场景

    2.3 生态系统

    • Hive依赖于HDFS 存储数据、
    • Hive依赖于MapReduce 处理数据
    • 在某些场景下Pig可以作为Hive的替代工具
    • HBase 提供数据的实时访问
    • Pig主要用于数据仓库的ETL环节
    • Hive主要用于数据仓库海量数据的批处理分析

    在这里插入图片描述

    3. Hive系统架构

    • 用户接口模块。包括CLI、HWI、JDBC、ODBC、Thrift Server
    • 驱动模块(Driver)。包括编译器、优化器、执行器等,负责把HiveQL语句转换成一系列MapReduce作业
    • 元数据存储模块(Metastore)。是一个独立的关系型数据库(自带derby数据库,或MySQL数据库)

    在这里插入图片描述

    4. HQL转成MapReduce作业的原理

    4.1 join的实现原理

    select name, orderid from user join order on user.uid=order.uid;
    

    在这里插入图片描述

    4.2 group by的实现原理

    存在一个分组(Group By)操作,其功能是把表Score的不同片段按照rank和level的组合值进行合并,计算不同rank和level的组合值分别有几条记录:

    select rank, level ,count(*) as value from score group by rank, level
    

    在这里插入图片描述

    5. 实验练习

    5.1 环境配置

    5.1.1 HIVE

    在这里插入图片描述
    将Hive解压到/usr/local中
    在这里插入图片描述
    更改名字
    在这里插入图片描述
    更改hive目录所有者和所在用户组
    在这里插入图片描述
    环境配置
    在这里插入图片描述
    在这里插入图片描述
    使环境生效
    在这里插入图片描述

    5.1.2 MYSQL

    更新软件源
    在这里插入图片描述
    在这里插入图片描述

    安装mysql-server
    在这里插入图片描述

    安装成功
    在这里插入图片描述
    确定mysql服务是否打开

    在这里插入图片描述

    启动和关闭mysql服务

    • 关闭
    service mysql stop
    
    • 启动
     service mysql start
    

    5.1.3 配置MySql为hive元数据存储数据库

    进入mysql shell

    sudo mysql 或 sudo mysql –u root –p 命令,回车后会提示输入密码,前者输入当前系统用户密码,后者是输入 mysql root 用户密码一般为空,回车进入 mysql 命令行。这里 root是 mysql 安装时默认创建的用户,不是 Ubuntu 系统的 root 用户。

    在这里插入图片描述

    新建一个数据库用来保存hive元数据(hive_metadata_zqc)
    在这里插入图片描述

    在这里插入图片描述

    1. 配置mysql允许hive接入
      在这里插入图片描述
      将所有数据库的所有表的所有权限赋给新建的hive_zqc用户,hive_zqc、'hive’是后续操作中要对 hive-site.xml 文件配置的连接到 MySQL 数据库的用户名、密码,由你自己定义;

      刷新mysql系统权限关系表
      在这里插入图片描述
      exit 退出
      在这里插入图片描述

    2. 配置hive

      下载mysql jdbc包https://dev.mysql.com/downloads/connector/j/ ;

      在这里插入图片描述

      在这里插入图片描述
      在这里插入图片描述
      解压jdbc包后,将其中的jar包拷贝至hive安装目录下lib文件夹中
      在这里插入图片描述
      进入/usr/local/hive/conf 目录。将hive-default.xml.template 重命名为hive-default.xml 保存着各个配置参数的默认值。
      在这里插入图片描述
      新建一个hive-site.xml 配置文件,并添加如下内容,该文件内容会覆盖原默认值
      在这里插入图片描述
      箭头标记处说明:hive_metadata_zqc 是前面步骤 MySQL 里新建的 database、hive_zqc和 hive 是连接数据库的用户名以及密码;
      在这里插入图片描述

    <configuration>
            <property>
            <name>javax.jdo.option.ConnectionURL</name>
            <value>jdbc:mysql://localhost:3306/hive_metadata_zqc?createDatabaseIfNotExist=true</value>
            <description>JDBC connect string for a JDBC metastore</description>
            </property>
    
            <property>
            <name>javax.jdo.option.ConnectionDriverName</name>
            <value>com.mysql.jdbc.Driver</value>
            <description>Driver class name for a JDBC metastore</description>
            </property>
    
            <property>
            <name>javax.jdo.option.ConnectionUserName</name>
            <value>hive_zqc</value>
            <description>username to use against metastore database</description>
            </property>
    
            <property>
            <name>javax.jdo.option.ConnectionPassword</name>
            <value>hive</value>
            <description>password to use against metastore database</description>
            </property>
    
    </configuration>
    
    
    1. 初始化元数据库,启动 Hive,进入 Hive 运行时环境

      初始化元数据库,不然有可能会报错。
      在这里插入图片描述
      可能出现错误
      在这里插入图片描述
      原因:com.google.common.base.Preconditions.checkArgument 这是因为 hive 内依赖的 guava.jar 和hadoop内的版本不一致造成的。

      解决方法:查看hadoop安装目录下 share/hadoop/common/lib 内 guava.jar 版本,查看 hive安装目录下lib内guava.jar的版本,如果两者不一致,删除版本低的,并拷贝高版本的。
      在这里插入图片描述
      两个版本一样了
      在这里插入图片描述
      在进行一次初始化元数据库
      在这里插入图片描述
      成功了!

    2. 启动Hive

      启动hive 之前,请先启动hadoop集群(start-dfs.sh)和确保MySQL服务正常运行。“hive”命令启动 hive。
      启动hadoop集群

      在这里插入图片描述
      启动mysql
      在这里插入图片描述
      启动hive
      在这里插入图片描述

    5.2 Shell进行实验内容

    表1 student_zqc:

    NameSexBirthDeptUid
    LiuyiF2002/11/26CS180301
    ChenerF2001/6/11CS180302
    ZhangsanM2002/9/21CS180303
    LisiF2001/1/26SE180201

    表2 grade_zqc:

    UidCourseGrade
    180301Chinese90
    180301Math58
    180301English39
    180302Chinese91
    180302Math95
    180302English75
    180303Chinese60
    180303Math58
    180303English53
    180201Chinese62
    180201Math43
    180201English74

    5.2.1 新建一个数据库;

    新建一个数据库db_xxx,添加扩展参数:日期、学号、姓名;使用该数据库做后续操作;设置命令行显示当前使用的数据库,请保证后续操作都能显示。

    创建的时候添加了日期,学号,姓名,以及存放路径

    在这里插入图片描述
    在这里插入图片描述

    5.2.2 新建表

    新建student_xxx分区表(分区字段Dept)和grade_xxx内部表,分别查看表结构和存储路径;(字段类型自定义)
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    5.2.3 添加分区

    在表student_zqc中添加两个分区Dept=’CS’和Dept=’SE’,从本地导入数据到student_xxx表的两个分区中,分别查看两个分区所有记录,查看表数据存储目录;

    在这里插入图片描述
    从文件中加载数据,load data
    语法 :

    LOAD DATA [LOCAL] INPATH 'filepath' [OVERWRITE] INTO TABLE tablename
    

    首先在本地主目录下创建数据文件 input.txt,并上传到 HDFS 中。
    注意分隔符要跟你表设置一致。

    1. 本地创建两个文件
      input1.txt
      在这里插入图片描述
      input.txt
      在这里插入图片描述
    2. 将两个文件上传到HDFS
      在这里插入图片描述
    3. 在hive中加载
      在这里插入图片描述
    4. 查看是否加载成功 在这里插入图片描述

    5.2.4 导入grade_zqc

    从HDFS导入数据到grade_xxx表中,查看grade_xxx表所有记录,查看表数据存储目录;

    本地创建表 input3.txt
    在这里插入图片描述
    上传到hdfs
    在这里插入图片描述
    加载到hive中
    在这里插入图片描述
    在这里插入图片描述

    5.2.5 统计男、女生人数

    select sex,count(1) from student_zqc group by sex;
    

    在这里插入图片描述

    5.2.6 统计每个学生所有科目的总分以及平均分

    在这里插入图片描述

    select uid,avg(grade) from grade_zqc group by uid;
    

    在这里插入图片描述

    5.2.7 统计每个科目有多少人以及每个科目平均成绩

    在这里插入图片描述

    在这里插入图片描述

    5.2.8 查询chinese科目得分排前两名学生学号和分数;

    在这里插入图片描述

    5.2.9 创建一个新表rank_zqc保存CS系每个学生信息和科目总分,按成绩降序排序,并查询结果;

    在这里插入图片描述

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    在这里插入图片描述
    在这里插入图片描述

    5.2.10 统计每个系所有科目平均成绩在所有系中的占比。

    例如CS系Chinese科目平均成绩在所有系的比例是1.06。

    在这里插入图片描述

    在这里插入图片描述

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    5.2.11 统计每个系每个科目考试不合格学生的占比。

    在这里插入图片描述
    在这里插入图片描述

    在这里插入图片描述

    5.2.12 删除分区,删除表,删除库,退出Hive。(删除操作请谨慎!)

    查看表分区
    在这里插入图片描述
    删除分区
    在这里插入图片描述
    删除表
    在这里插入图片描述
    删除库
    在这里插入图片描述
    退出
    在这里插入图片描述

    5.3 JavaApi进行实验内容

    编写一个UDF,函数名UDFXxx,查询学生(输入字段:student_xxx.Birth)出生天数。给出定义和使用UDF的完整流程和截图。

    添加包

    在这里插入图片描述
    在这里插入图片描述

    在这里插入图片描述

    import org.apache.hadoop.hive.ql.exec.UDF;
    import org.apache.hadoop.io.IntWritable;
    import org.apache.hadoop.io.Text;
    import org.joda.time.DateTime;
    import org.joda.time.format.DateTimeFormat;
    import org.joda.time.format.DateTimeFormatter;
    
    import java.text.ParseException;
    import java.text.SimpleDateFormat;
    import java.util.Date;
    
    public class UDFzqc extends UDF{
        public final static DateTimeFormatter DEFAULT_DATE_FORMATTER = DateTimeFormat.forPattern("yyyy/MM/dd");
        private Text result = new Text();
        public Text evaluate(Text birthday) throws ParseException{
            DateTime dateTime = null;
            try {
                dateTime = DateTime.parse(birthday.toString(), DEFAULT_DATE_FORMATTER);
            }catch(Exception e) {
                return null;
            }
            return evaluate(dateTime.toDate());
        }
    
        public Text evaluate(Date birthday) throws ParseException{
            DateTime dateTime = new DateTime(birthday);
            return evaluate(new IntWritable(dateTime.getYear()), new IntWritable(dateTime.getMonthOfYear()),
                    new IntWritable(dateTime.getDayOfMonth()));
        }
    
        public Text evaluate(IntWritable year, IntWritable month,IntWritable day) throws ParseException{
            result.set(getDays(year.get(), month.get(), day.get()));
            return result;
        }
    
        private String getDays(int year, int month, int day) throws ParseException{
            String s = year + "/" + month + "/" + day;
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd");
            Date d = sdf.parse(s);
            long birthTime = d.getTime();
            long nowTime = new Date().getTime();
            return (nowTime - birthTime)/1000/3600/24 + " days";
        }
        public static void main(String[] args) throws ParseException{
            UDFzqc test = new UDFzqc();
            System.out.println(test.evaluate(new Text("2021/06/01")));
        }
    }
    

    最后

    小生凡一,期待你的关注

    展开全文
  • 数据仓库基本理论

    千次阅读 2019-08-01 10:58:36
    1、关系模式范式 1.1 范式理论概述 关系型数据库设计时,遵照一定的...范式的标准定义是:符合某一种级别的关系模式的集合,表示一关系内部各属性之间的联系的合理化程度。通俗地讲,范式可以理解为一张数据表的...

    1、关系模式范式

    1.1 范式理论概述

    关系型数据库设计时,遵照一定的规范要求,目的在于降低数据的冗余性和数据的一致性,目前业界范式有:第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、巴斯-科德范式(BCNF)、第四范式(4NF)、第五范式(5NF)。

    范式的标准定义是:符合某一种级别的关系模式的集合,表示一个关系内部各属性之间的联系的合理化程度。通俗地讲,范式可以理解为一张数据表的表结构所符合的某种设计标准的级别。

    使用范式的根本目的是:减少数据冗余,尽量让每个数据只出现一次**,获取数据时通过 join 拼接出最后的数据**。

    1.2 范式基本概念

    学号 姓名 系名 系主任 课名 分数
    20170901176王小强计算机系马小腾C 语言95
    20170901176王小强计算机系马小腾计算机基础99
    20170901176王小强计算机系马小腾高等数学80
    20170901179李阳经管系王小石经济学95
    20170901179李阳经管系王小石管理学92
    20170901186张小俊数学系钱小森高等数学89
    20170901186张小俊数学系钱小森线性代数96
    • ① 函数依赖

    若在一张表中,在属性(或属性组)X 的值确定的情况下,必定能确定属性 Y 的值, 那么就可以说 Y 函数依赖于 X,写作 X → Y。

    表中其他的函数依赖关系还有如: 系名 → 系主任 ; 学号 → 系主任;(学号,课名) → 分数。
    以下函数依赖关系则不成立: 学号 → 课名;学号 → 分数课名 → 系主任;(学号,课名) → 姓名。

    • ② 完全函数依赖

    在一张表中,若 X → Y,且对于 X 的任何一个真子集X '(假如属性组 X 包含超过一个属性的话),X ’ → Y 不成立,那么我们称 Y 对于 X 完全函数依赖,记做:
    在这里插入图片描述
    例如:学号 F→ 姓名 ;(学号,课名) F→ 分数。

    • ③ 部分函数依赖

    假如 Y 函数依赖于 X,但同时 Y 并不完全函数依赖于 X,那么我们就称 Y 部分函数依赖于 X,记做:
    在这里插入图片描述
    简单来说,(学号,课名)→ 系名;学号 → 系名;那么(学号,课名)p→ 系名。

    • ④ 传递函数依赖

    假如 Z 函数依赖于 Y,且 Y 函数依赖于 X ,且 Y 不包含于 X,X 不函数依赖于 Y,那么我们就称 Z 传递函数依赖于 X,记做:
    在这里插入图片描述
    简单来说,系名 → 系主任,学号 → 系名,那么学号 T→ 系主任。

    1.3 常见范式

    1. 一范式(1NF):域应该是原子性的,即数据库表的每一列都是不可分割的原子数据项(属性不可分割):就是列的取值范围,比如性别的域就是(男,女)。 1NF 是所有关系型数据库的最基本要求。

    2. 二范式(2NF):在 1NF 的基础上,实体的属性完全函数依赖于主关键字(唯一性), 不能存在部分函数依赖于主关键字(混合主键)。如果存在某些属性只依赖混合主键中的部分属性,那么不符合二范式。为了消除这种部分依赖,只有一个办法,就是将大数据表拆分成两个或者更多个更小的数据表

    3. 三范式(3NF): 3NF 在 2NF 的基础之上,消除了非主属性对于主键(复合主键)的传递依赖

    所谓的范式,是用来学习参考的,设计的时候根据情况,未必一定要遵守,切记。
    数据库三大范式通俗解释:https://blog.csdn.net/q957967519/article/details/81910547

    2、数据仓库建模基本理论

    2.1 数据仓库建模目标

    数据仓库建模的目标是通过建模的方法更好的组织、存储数据,以便在性能、成本、效率和数据质量之间找到最佳平衡点。

    1.访问性能:能够快速查询所需的数据,减少数据 I/O;
    2.数据成本:减少不必要的数据冗余,实现计算结果数据复用,降低大数据系统中的数据成本和计算成本;
    3.使用效率:改善用户应用体验,提高使用数据的效率;
    4.数据质量:整合所有数据源的数据,改善数据统计口径的不一致性,减少数据计算错误的可能性,提供高质量的、一致的数据访问平台。

    上述的四点之间是存在冲突的,为了提高访问性能,可能会提高数据冗余(减少 Join), 这样会降低计算成本,但是会导致数据存储成本很高,并且由于数据的冗余,会提高数据统计口径不一致的风险,我们的目的是通过合理的设计在性能、成本、效率和数据质量之间找到平衡点

    2.2 E-R 实体模型

    2.2.1 基本理论

    ER 模型是数据库设计的理论基础,当前几乎所有的 OLTP 系统设计都采用 ER 模型建模的方式。
    在信息系统中,将事物抽象为“实体”、“属性”、“关系”来表示数据关联和事物描述;其中,实体:Entity,关系:Relationship,这种对数据的抽象建模通常被称为 ER 实体关系模型。

    1.实体:通常为参与到过程中的主体,客观存在的,比如商品、仓库、货位、汽车,此实体非数据库的实体表。
    2.属性对主体的描述、修饰即为属性,比如商品的属性有商品名称、颜色、尺寸、重量、产地等。
    3.关系:现实的物理事件是依附于实体的,比如商品入库事件,依附实体商品、货位, 就会有“库存”的属性产生;用户购买商品,依附实体用户、商品,就会有“购买数量”、 “金额”的属性产品。

    2.2.2 实体之间的对照关系

    实体之间建立关系时,存在对照关系:

    • 1:1,即 1 对 1 的关系,比如实体人、身份证,一个人有且仅有一个身份证号;(A->B: 相互完全依赖,知道 A 一定确定 B,知道 B 一定确定 A)。(动静分离:在数据库设计时,会将动态属性(年龄、地址、偏好、…)和静态属性(姓名、性别、身份证号、…)进行分离,剥离为两张表,一张父表,一张子表,从而提高性能)。
    • 1:n,即 1 对多的关系,比如实体学生、班级,对于某 1 个学生,仅属于 1 个班级,而在 1
      个班级中,可以有多个学生;(一张学生表,一张班级表,通过班级 ID 这个外键进行关联)。
    • n:m,即多对多的关系,比如实体学生、课程,每个学生可以选修多门课程,同样每个课程也可以被多门学生选修;(一张学生表,一张课程表,一张选课表)。

    2.2.3 ER 建模的图形表示

    在日常建模过程中:
    “实体”:使用矩形表示;
    “关系”:使用菱形表示;
    “属性”:使用椭圆形表示;
    所以 ER 实体关系模型也称作 E-R 关系图

    2.2.4 ER实体建模实例

    1.场景
    学生选课系统,该系统主要用来管理学生和选修课程,其中包括课程选修、学生管理功能,现需要完成数据库逻辑模型设计。
    2.实现步骤
    ①.抽象出主体 —— 学生,课程;
    ②.梳理主体之间的关系 —— 选修;(学生与选修课程是一个多对多的关系)
    ③.梳理主体的属性;
    ④.画出 E-R 关系图;
    在这里插入图片描述

    2.3 维度模型

    维度建模的理论由 Ralph Kimball 提出,他提出将数据仓库中的表划分为事实表和维度表两种类型
    维度建模源自数据集市,主要面向分析场景
    ① “事实表”,用来存储事实的度量(measure)及指向各个维的外键值。
    ② “维度表”,用来保存该维的元数据,即维的描述信息,包括维的层次及成员类别等。

    简单的说,维度表就是你观察该事物的角度(维度),事实表就是你要关注的内容。例如用户使用滴滴打车,那么打车这件事就可以转化为一个事实表,即打车订单事实表,然后用户对应一张用户维度表,司机对应一张司机维度表。
    维度模型

    2.3.1 事实表往往包含三个重要元素:

    - 1.维度表外键
    - 2.度量数据
    - 3.事件描述信息

    例如在电商场景中的一次购买事件,涉及主体包括客户、商品、商家,产生的可度量值包括商品数量、金额、件数等。
    在这里插入图片描述

    2.3.2 维度表

    每个维度表都包含单一的主键列。维度表的主键可以作为与之关联的任何事实表的外键,当然,维度表行的描述环境应与事实表行完全对应。维度表通常比较宽,是扁平型非规范表,包含大量的低粒度的文本属性。
    在这里插入图片描述
    如上图商品维度表,单一主键为商品 ID,属性包括颜色、尺寸、单价、生产商等,但并非属性一定是文本,比如单价、尺寸,均为数值型描述性的,日常主要的维度抽象包括:时间维度表、地理区域维度表等

    综上所述,如果针对用户的下单行为(单一商品)进行维度建模,我们可以得到如下模型:
    维度建模实例

    2.4 建模方法总结

    ER 模型以及维度模型是当前主流的建模方法。

    ER 模型常用于 OLTP 数据库建模,应用到构建数仓时更偏重数据整合,站在企业整体考虑,将各个系统的数据按相似性、一致性合并处理,为数据分析、决策服务,但并不便于直接用来支持分析

    ER 模型的特点如下:

    1. 需要全面梳理企业所有的业务和数据流。
    2. 实施周期长。
    3. 对建模人员要求高。

    维度建模是面向分析场景而生,针对分析场景构建数仓模型;重点关注快速、灵活的解决分析需求,同时能够提供大规模数据的快速响应性能。针对性强,主要应用于数据仓库构建和 OLAP 引擎低层数据模型

    维度建模的特点如下:

    1. 不需要完整的梳理企业业务流程和数据;
    2. 实施周期根据主题边界而定,容易快速实现 demo 。

    2.5 星型模式、雪花模式与星座模式

    2.5.1 星型模式

    星型模式是维度模型中最简单的形式,也是数据仓库以及数据集市开发中使用最广泛的形式。

    星型模式由事实表和维度表组成,一个星型模式中可以有一个或多个事实表,每个事实表引用任意数量的维度表。星型模式的物理模型像一颗星星的形状,中心是一个事实表, 围绕在事实表周围的维度表表示星星的放射状分支,这就是星型模式这个名字的由来。星型模式将业务流程分为事实和维度。事实包含业务的度量,是定量的数据,如销售价格、销售数量、距离、速度、重量等是事实。维度是对事实数据属性的描述,如日期、产品、客户、地理位置等是维度。一个含有很多维度表的星型模式有时被称为蜈蚣模式,显然这个名字也是因其形状而得来的。蜈蚣模式的维度往往只有很少的几个属性,这样可以简化对维度表的维护,但查询数据时会有更多的表连接,严重时会使模型难于使用,因此在设计中应该尽量避免蜈蚣模式
    星型模式

    2.5.2 雪花模式

    雪花模式是一种多维模型中表的逻辑布局,其实体关系图有类似于雪花的形状,因此得名。

    与星型模式相同,雪花模式也是由事实表和维度表所组成。所谓的“雪花化”就是将星型模型中的维度表进行规范化处理。当所有的维度表完成规范化后,就形成了以事实表为中心的雪花型结构,即雪花模式。

    将维度表进行规范化的具体做法是,把低基数的属性从维度表中移除并形成单独的表。基数指的是一个字段中不同值的个数,如主键列具有唯一值, 所以有最高的基数,而像性别这样的列基数就很低。

    在雪花模式中,一个维度被规范化成多个关联的表,而在星型模式中,每个维度由一个单一的维度表所表示。一个规范化的维度对应一组具有层次关系的维度表,而事实表作为雪花模式里的子表,存在具有层次关系的多个父表。
    雪花模式

    2.5.3 星座模式

    数据仓库由多个主题构成,包含多个事实表,而维表是公共的,可以共享,这种模式可以看做星型模式的汇集,因而称作星系模式或者事实星座模式。
    在这里插入图片描述

    2.6 模式的选择

    在数据仓库建模时,会涉及到模式的选择,我们要根据不同模式的特点选择适合具体业务的模式:

    1.冗余雪花模型符合业务逻辑设计,采用 3NF 设计,有效降低数据冗余;星型模型的维度表设计不符合 3NF(如果是雪花模型改造成了星型模型,那么肯定不符合3NF,因为一定发生了表的整合,即降维,一定有传递依赖,但是**,并不是所有的星型模型都不符合 3NF**,很多星型模型的表是符合 3NF 的),反规范化,维度表之间不会直接相关,牺牲部分存储空间。
    2. 性能雪花模型由于存在维度间的关联,采用 3NF降低冗余,通常在使用过程中,需要连接更多的维度表,导致性能偏低;星型模型反三范式,采用降维的操作将维度整合,以存储空间为代价有效降低维度表连接数,性能较雪花模型高。( 星型表的数据冗余大,是用存储空间换取效率 )( BI 的一些工具对于星型模型的支持更规范化 )。
    3. ETL雪花模型符合业务 ER 模型设计原则,在 ETL 过程中相对简单,但是由于附属模型的限制,ETL 任务并行化较低(由于雪花模型中有很多的维度依赖,在 ETL 的时候, 需要在保持 3NF 的前提下对数据进行清洗,即对数据一致性/规范化的处理,例如数据来自于多个业务系统,各个系统对于用户的定义不一致,此时要对每个业务定义的用户数据进行规范化处理,在 3NF 的限制下必然会降低并行度);星型模型在设计维度表时反范式设计, 所以在 ETL 过程中整合业务数据到维度表有一定难度,但由于避免附属维度,可并行化处理(不用关注太多的关联关系,避免了维度表之间的关联关系,并行度较高,注意,一般场景下星型模型的并行化程度更高,并不是所有场景)。

    Hive 的分析通过 MapReduce 实现,每多一个 Join 就会多出一个 MapReduce 过程,对于雪花模型,由于存在着很多维度表之间的关联,这就会导致一次分析对应多个 MapReduce 任务,而星型模型由于不存在维度表的关联,因此一个 MapReduce 就可以实现分析任务
    MapReduce 本身是一个支持高吞吐量的任务,它的每个任务都要申请资源、分配容器、节点通信等待,需要 YARN 的调度,由于相互关联的维度表本身会很小,join 操作用时很少,YARN 调度的时长可能都大于实际运算的时长,因此我们要尽可能减少任务个数对于 Hive 来说就是尽可能减少不必要的表的关联。还有一点,雪花模型中拆分出的维度表,每个表对应至少一个文件,这就涉及到 I/O 方面的性能损耗

    因此,我们要采用适当的数据冗余,避免不必要的表之间的关联。

    在实际项目中,不会刻意地去考虑雪花模型,而是刻意地去考虑星型模型,特别是大数据领域的建模,倾斜于使用数据冗余来提高查询效率,倾向于星型模型;雪花模型只会应用在一些我们要求模型的灵活性,要求保证模型本身稳定性的场景下,但是雪花模型并不是首选

    展开全文
  • 数据仓库基本知识

    万次阅读 多人点赞 2017-10-31 17:35:04
    数据仓库是什么 根据统计,每企业的数据量每2~3年时间就会成倍增长,这些数据蕴含着巨大的商业价值,而企业所关注的通常只占在总数据量的2%~4%左右。 因此,企业仍然没有最大化地利用已存在的数据资源,以...

    数据仓库是什么

    根据统计,每个企业的数据量每2~3年时间就会成倍增长,这些数据蕴含着巨大的商业价值,而企业所关注的通常只占在总数据量的2%~4%左右。
    因此,企业仍然没有最大化地利用已存在的数据资源,以至于浪费了更多的时间和资金,也失去制定关键商业决策的最佳契机。
    于是,企业如何通过各种技术手段,并把数据转换为信息、知识避免各种无知状态和瞎猜行为,已经成了提高其核心竞争力的主要瓶颈。
    数据仓库是把数据转换为信息、知识的一种主要技术手段。
    数据仓库是面向分析的存储系统
    数据仓库,是为企业所有级别的决策制定过程,提供所有类型数据支持的数据集合。
    这些数据集合出于分析性报告和决策支持目的而创建,用于支持研究管理决策。
    一是为调查研究作数据支撑,二是为实现需要业务智能的企业,提供指导业务流程改进、监视时间、成本、量以及控制。
    数据仓库是一个过程而不是一个项目;数据仓库是一个环境,而不是一件产品。
    数据仓库提供用户用于决策支持的当前和历史数据,这些数据在传统的操作型数据库中很难或不能得到。

    [903014-20160322154102745-1726255952.jpg]


    目标和DEMO

    将联机事务处理(OLTP)经年累月所累积的大量数据资料,透过数据仓库理论所特有的资料储存架构,做数据的清理保存,提供给各种分析方法使用,如联机分析处理(OLAP)、数据挖掘(Data Mining),并进而创建 决策支持系统(DSS)、主管资讯系统(EIS)、研究支持系统,帮助决策者研究者快速有效的自大量资料中,分析出有价值的资讯,能够快速回应外在环境变动,帮助建构商业智能(BI),挖掘内部数据价值,产生更多高质量的内容。

    数据仓库给组织带来了巨大的变化。数据仓库的建立给企业带来了一些新的工作流程,其他的流程也因此而改变。

    数据仓库为企业带来了一些“以数据为基础的知识”,它们主要应用于对市场战略的评价,和为企业发现新的市场商机,同时,也用来控制库存、检查生产方法和定义客户群。

    通过数据仓库,可以建立企业的数据模型,这对于企业的生产与销售、成本控制与收支分配有着重要的意义,极大的节约了企业的成本,提高了经济效益,同时,用数据仓库可以分析企业人力资源与基础数据之间的关系,可以用于返回分析,保障人力资源的最大化利用,亦可以进行人力资源绩效评估,使得企业管理更加科学合理。数据仓库将企业的数据按照特定的方式组织,从而产生新的商业知识,并为企业的运作带来新的视角。

    国外知名的Garnter关于数据集市产品报告中,位于第一象限的敏捷商业智能产品有QlikView, Tableau和SpotView,都是全内存计算的数据集市产品,在大数据方面对传统商业智能产品巨头形成了挑战。

    国内BI产品起步较晚,知名的敏捷型商业智能产品有PowerBI, 永洪科技的Z-Suite,SmartBI,FineBI商业智能软件等,其中永洪科技的Z-Data Mart是一款热内存计算的数据集市产品。

    国内的德昂信息也是一家数据集市产品的系统集成商。

    [v2-da8260eae1a66096e3b61cd598b06596_hd.png]

    [v2-da8260eae1a66096e3b61cd598b06596_hd.png]

    阿里数加
    https://data.aliyun.com/


    数据仓库的特点

    数据仓库是一个面向主题的(Subject Oriented)、集成的(Integrate)、相对稳定的(Non-Volatile)、反映历史变化(Time Variant)的数据集合

    1、面向主题

    操作型数据库的数据组织面向事务处理任务,各个业务系统之间各自分离,而数据仓库中的数据是按照一定的主题域进行组织的。

    2、集成的

    数据仓库中的数据是在对原有分散的数据库数据抽取、清理的基础上经过系统加工、汇总和整理得到的,必须消除源数据中的不一致性,以保证数据仓库内的信息是关于整个企业的一致的全局信息。

    3、相对稳定的

    数据仓库的数据主要供企业决策分析之用,所涉及的数据操作主要是数据查询,一旦某个数据进入数据仓库以后,一般情况下将被长期保留,也就是数据仓库中一般有大量的查询操作,但修改和删除操作很少,通常只需要定期的加载、刷新。

    4、反映历史变化

    数据仓库中的数据通常包含历史信息,系统记录了企业从过去某一时点(如开始应用数据仓库的时点)到目前的各个阶段的信息,通过这些信息,可以对企业的发展历程和未来趋势做出定量分析和预测。

    5、效率足够高
    数据仓库的分析数据一般分为日、周、月、季、年等,可以看出,日为周期的数据要求的效率最高,要求24小时甚至12小时内,客户能看到昨天的数据分析。由于有的企业每日的数据量很大,设计不好的数据仓库经常会出问题,延迟1-3日才能给出数据,显然不行的。


    数据仓库技术

    数据仓库技术是为了有效的把操作形数据集成到统一的环境中以提供决策型数据访问的各种技术和模块的总称。所做的一切都是为了让用户更快更方便查询所需要的信息,提供决策支持。

    从功能结构划分,数据仓库系统至少应该包含数据获取(Data Acquisition)、数据存储(Data Storage)、数据访问(Data Access)三个关键部分。

    数据获取

    数据源

    数据源是数据仓库系统的基础,是整个系统的数据源泉。通常包括企业内部信息和外部信息。内部信息包括存放于RDBMS中的各种业务处理数据和各类文档数据。外部信息包括各类法律法规、市场信息和竞争对手的信息等等;

    元数据

    对业务数据本身及其运行环境的描述与定义的数据,称之为元数据(metadata)。 元数据是描述数据的数据。 元数据的典型表现为对象的描述,即对数据库、表、列、列属性(类型、格式、约束等)以及主键/外部键关联等等的描述。 特别是现行应用的异构性与分布性越来越普遍的情况下,统一的元数据就愈发重要了。“信息孤岛”曾经是很多企业对其应用现状的一种抱怨和概括,而合理的元数据则会有效地描绘出信息的关联性。 而元数据对于ETL的集中表现为:定义数据源的位置及数据源的属性、确定从源数据到目标数据的对应规则、确定相关的业务逻辑、在数据实际加载前的其他必要的准备工作,等等,它一般贯穿整个数据仓库项目,而ETL的所有过程必须最大化地参照元数据,这样才能快速实现ETL。

    数据转换工具

    1)数据转换工具要能从各种不同的数据源中读取数据。 2)支持平面文件、索引文件、和legacyDBMS。 3)能以不同类型数据源为输入整合数据。 4)具有规范的数据访问接口 5)最好具有从数据字典中读取数据的能力 6)工具生成的代码必须是在开发环境中可维护的 7)能只抽取满足指定条件的数据,和源数据的指定部分 8)能在抽取中进行数据类型转换和字符集转换 9)能在抽取的过程中计算生成衍生字段 10)能让数据仓库管理系统自动调用以定期进行数据抽取工作,或能将结果生成平面文件 11)必须对软件供应商的生命力和产品支持能力进行仔细评估 主要数据抽取工具供应商:Prismsolutions. Carleton'sPASSPORT. InformationBuildersInc.'s EDA/SQL. SASInstituteInc.

    数据清洗ETL

    ETL分别代表:提取extraction、转换transformation、加载load。

    其中提取过程表示操作型数据库搜集指定数据,转换过程表示将数据转化为指定格式并进行数据清洗保证数据质量,加载过程表示将转换过后满足指定格式的数据加载进数据仓库。

    数据仓库会周期不断地从源数据库提取清洗好了的数据,因此也被称为"目标系统";

    实现ETL,首先要实现ETL转换的过程。体现为以下几个方面:
    1、空值处理:可捕获字段空值,进行加载或替换为其他含义数据,并可根据字段空值实现分流加载到不同目标库。
    2、规范化数据格式:可实现字段格式约束定义,对于数据源中时间、数值、字符等数据,可自定义加载格式。
    3、拆分数据:依据业务需求对字段可进行分解。例,主叫号 861082585313-8148,可进行区域码和电话号码分解。
    4、验证数据正确性:可利用Lookup及拆分功能进行数据验证。例如,主叫号861082585313-8148,进行区域码和电话号码分解后,可利用Lookup返回主叫网关或交换机记载的主叫地区,进行数据验证。
    5、数据替换:对于因业务因素,可实现无效数据、缺失数据的替换。
    6、Lookup:查获丢失数据 Lookup实现子查询,并返回用其他手段获取的缺失字段,保证字段完整性。
    7、建立ETL过程的主外键约束:对无依赖性的非法数据,可替换或导出到错误数据文件中,保证主键唯一记录的加载。

    根据以往数据仓库项目的经验,在一个数据仓库项目中,ETL设计和实施的工作量一般要占总项目工作量的40%-60%,而且数据仓库项目一般会存在二次需求的问题,客户在项目的实施过程中或者使用过程中会提出新的业务需求,而任何前端业务模型的改变都会涉及到ETL设计,因此ETL工具的选择对于整个数据仓库项目的成功是非常重要的。

    选型

    ETL工具的典型代表有:Informatica powercenter、Datastage、Oracle OWB(oracle warehouse builder)、ODI、微软DTS、Beeload、Kettle、Talend 、DataSprider、Spark、等等……

    开源的工具有eclipse的etl插件:CloverETL和Octupus

    在购买现成的工具之外,还有自己从头开发ETL程序的。

    ETL工作看起来并不复杂,特别是在数据量小、没有什么转换逻辑的时候,自己开发似乎非常节省成本。的确,主流的ETL工具价格不菲,动辄几十万;而从头开发无非就是费点人力而已,可以控制。至于性能,人大多是相信自己的,认为自己开发出来的东西知根知底,至少这些程序可以完全由自己控制。

    就目前自主开发的ETL程序而言,有人用c语言编写,有人用存储过程,还有人用各种语言混杂开发,程序之间各自独立。这很危险,虽然能够让开发者过足编码的瘾,却根本不存在架构。

    有位银行的朋友,他们几年前上的数据仓库系统,就是集成商自己用c语言专门为他们的项目开发的。单从性能上看似乎还不赖,然而一两年下来,项目组成员风雨飘零,早已物是人非,只有那套程序还在那里;而且,按照国内目前的软件工程惯例,程序注释和文档是不全或者是不一致的,这样的程序已经对日常业务造成很大阻碍。最近,他们已经开始考虑使用ETL工具重新改造了。

    扩展阅读

    数据仓库项目应该如何选择ETL工具:ETL or E-LT? http://blog.csdn.net/mengdebin/article/details/41151533

    ETL构建企业级数据仓库五步法
    http://blog.csdn.net/xcbsdu/article/details/6637775

    数据存储

    数据集市(Data Marts)

    为了特定的应用目的或应用范围,而从数据仓库中独立出来的一部分数据,也可称为部门数据或主题数据(subjectarea)。在数据仓库的实施过程中往往可以从一个部门的数据集市着手,以后再用几个数据集市组成一个完整的数据仓库。需要注意的就是再实施不同的数据集市时,同一含义的字段定义一定要相容,这样再以后实施数据仓库时才不会造成大麻烦。

    数据仓库管理

    安全和特权管理;跟踪数据的更新;数据质量检查;管理和更新元数据;审计和报告数据仓库的使用和状态;删除数据;复制、分割和分发数据;备份和恢复;存储管理。

    选型

    在大数据时代,数据仓库的重要性更胜以往。Hadoop平台下的Hive,Spark平台下的Spark SQL都是各自生态圈内应用最热门的配套工具,而它们的本质就是开源分布式数据仓库。

    在国内最优秀的互联网公司里(如阿里、腾讯),很多数据引擎是架构在数据仓库之上的(如数据分析引擎、数据挖掘引擎、推荐引擎、可视化引擎等等)。不少员工认为,开发成本应更多集中在数据仓库层,不断加大数据建设的投入。因为一旦规范、标准、高性能的数据仓库建立好了,在之上进行数据分析、数据挖掘、跑推荐算法等都是轻松惬意的事情。
    反之如果业务数据没梳理好,各种脏乱数据会搞得人焦头烂额,苦不堪言。

    数据访问

    数据仓库通常需要提供具有直接访问数据仓库功能的前端应用,这些应用也被称为BI(商务智能)应用

    有数据查询和报表工具

    应用开发工具

    经理信息系统(EIS)工具

    联机分析处理(OLAP)工具

    数据仓库建设好以后,用户就可以编写SQL语句对其进行访问并对其中数据进行分析。但每次查询都要编写SQL语句的话,未免太麻烦,而且对维度建模数据进行分析的SQL代码套路比较固定。

    于是,便有了OLAP工具,它专用于维度建模数据的分析。而BI工具则是能够将OLAP的结果以图表的方式展现出来,它和OLAP通常出现在一起。(注:本文所指的OLAP工具均指代这两者。)

    这种情况下,OLAP不允许访问中心数据库。一方面中心数据库是采取规范化建模的,而OLAP只支持对维度建模数据的分析;另一方面规范化数据仓库的中心数据库本身就不允许上层开发人员访问。而在维度建模数据仓库中,OLAP/BI工具和数据仓库的关系则是这样的:

    在维度建模数据仓库中,OLAP不但可以从数据仓库中直接取数进行分析,还能对架构在其上的数据集市群做同样工作。

    数据挖掘工具。

    信息发布系统

    把数据仓库中的数据或其他相关的数据发送给不同的地点或用户。基于Web的信息发布系统是对付多用户访问的最有效方法。

    数据可视化选型

    你想知道的经典图表全在这
    https://zhuanlan.zhihu.com/p/24168144

    R语言
    http://www.cnblogs.com/muchen/p/5332359.html

    pentaho

    FineBI

    PowerBI
    http://www.cnblogs.com/muchen/p/5389960.html

    http://www.cnblogs.com/muchen/p/5391101.html

    深入浅出BI
    https://zhuanlan.zhihu.com/p/24573880

    [903014-20160328190120316-616433149.jpg]

    [903014-20160328185819613-1426949688.jpg]


    案例

    facebook的ppt上了解到的是他们在hive上做大数据量的分析,计算结果放到oracle上做BI展示和计算 hadoop MR or hive上ETL计算完的结果表,同步到oracle中,连接传统BI工具,呈现报表,阿里、腾讯、盛大都是这样的

    [v2-3e6958278b96043f5a2379778054deae_hd.png]


    与传统数据库的对比

    企业的数据处理大致分为两类:
    一类是操作型处理,也称为联机事务处理,它是针对具体业务在数据库联机的日常操作,通常对少数记录进行查询、修改。
    另一类是分析型处理,一般针对某些主题的历史数据进行分析,支持管理决策。

    数据库:传统的关系型数据库的主要应用,主要是基本的、日常的事务处理,例如银行交易。

    数据仓库:数据仓库系统的主要应用主要是OLAP(On-Line Analytical Processing),支持复杂的分析操作,侧重决策支持,并且提供直观易懂的查询结果。

    举个最常见的例子,拿电商行业来说好了。基本每家电商公司都会经历,从只需要业务数据库到要数据仓库的阶段。

    电商早期启动非常容易,入行门槛低。找个外包团队,做了一个可以下单的网页前端 + 几台服务器 + 一个MySQL,就能开门迎客了。这好比手工作坊时期。

    第二阶段,流量来了,客户和订单都多起来了,普通查询已经有压力了,这个时候就需要升级架构变成多台服务器和多个业务数据库(量大+分库分表),这个阶段的业务数字和指标还可以勉强从业务数据库里查询。初步进入工业化。

    第三个阶段,一般需要 3-5 年左右的时间,随着业务指数级的增长,数据量的会陡增,公司角色也开始多了起来,开始有了 CEO、CMO、CIO,大家需要面临的问题越来越复杂,越来越深入。

    高管们关心的问题,从最初非常粗放的:“昨天的收入是多少”、“上个月的 PV、UV 是多少”,逐渐演化到非常精细化和具体的用户的集群分析,特定用户在某种使用场景中,例如“20~30岁女性用户在过去五年的第一季度化妆品类商品的购买行为与公司进行的促销活动方案之间的关系”。这类非常具体,且能够对公司决策起到关键性作用的问题,基本很难从业务数据库从调取出来。

    原因在于:业务数据库中的数据结构是为了完成交易而设计的,不是为了而查询和分析的便利设计的。

    业务数据库大多是读写优化的,即又要读(查看商品信息),也要写(产生订单,完成支付)。

    因此对于大量数据的读(查询指标,一般是复杂的只读类型查询)是支持不足的。而怎么解决这个问题,此时我们就需要建立一个数据仓库了,公司也算开始进入信息化阶段了。

    数据仓库的作用在于:数据结构为了分析和查询的便利;只读优化的数据库,即不需要它写入速度多么快,只要做大量数据的复杂查询的速度足够快就行了。

    那么在这里前一种业务数据库(读写都优化)的是业务性数据库,后一种是分析性数据库,即数据仓库。

    最后总结一下:
    数据库 比较流行的有:MySQL, Oracle, SqlServer等
    数据仓库 比较流行的有:AWS Redshift, Greenplum, Hive等。
    这样把数据从业务性的数据库中提取、加工、导入分析性的数据库就是传统的 ETL 工作。

    数据仓库的方案建设的目的,是为前端查询和分析作为基础,由于有较大的冗余,所以需要的存储也较大。
    为了更好地为前端应用服务,数据仓库必须有如下几点优点,否则是失败的数据仓库方案。
    1.效率足够高。
    2.数据质量。
    3.扩展性。

    两类数据库的不同点:

    1.数据组成差别 - 数据时间范围差别

    一般来讲,操作型数据库只会存放90天以内的数据,而分析型数据库存放的则是数年内的数据。这点也是将操作型数据和分析型数据进行物理分离的主要原因。

    2.数据组成差别 - 数据细节层次差别

    操作型数据库存放的主要是细节数据,而分析型数据库中虽然既有细节数据,又有汇总数据,但对于用户来说,重点关注的是汇总数据部分。

    操作型数据库中自然也有汇总需求,但汇总数据本身不存储而只存储其生成公式。这是因为操作型数据是动态变化的,因此汇总数据会在每次查询时动态生成。

    而对于分析型数据库来说,因为汇总数据比较稳定不会发生改变,而且其计算量也比较大(因为时间跨度大),因此它的汇总数据可考虑事先计算好,以避免重复计算。

    3.数据组成差别 - 数据时间表示差别

    操作型数据通常反映的是现实世界的当前状态;而分析型数据库既有当前状态,还有过去各时刻的快照,分析型数据库的使用者可以综合所有快照对各个历史阶段进行统计分析。

    4.技术差别 - 查询数据总量和查询频度差别

    操作型查询的数据量少而频率多,分析型查询则反过来,数据量大而频率少。要想同时实现这两种情况的配置优化是不可能的,这也是将两类数据库物理分隔的原因之一。

    5.技术差别 - 数据更新差别

    操作型数据库允许用户进行增,删,改,查;分析型数据库用户则只能进行查询。

    6.技术差别 - 数据冗余差别

    数据的意义是什么?就是减少数据冗余,避免更新异常。而如5所述,分析型数据库中没有更新操作。因此,减少数据冗余也就没那么重要了。

    例如Hive是一种数据仓库,而数据仓库和分析型数据库的关系非常紧密。它只提供查询接口,不提供更新接口,这就使得消除冗余的诸多措施不需要被特别严格地执行了,可以保留冗余。

    7.功能差别 - 数据读者差别

    操作型数据库的使用者是业务环境内的各个角色,如用户,商家,进货商等;分析型数据库则只被少量用户用来做综合性决策。

    8.功能差别 - 数据定位差别

    这里说的定位,主要是指以何种目的组织起来。操作型数据库是为了支撑具体业务的,因此也被称为"面向应用型数据库";分析型数据库则是针对各特定业务主题域的分析任务创建的,因此也被称为"面向主题型数据库"。
    [4abe15bd7b3bcbc10f6b3846951b16d9_hd.jpg]


    怎么做

    1)收集和分析业务需求 确定指标

    基础数据的架构

    关键问题
    一般问题 (不完全是技术或文化,但很重要) 包括但不限于以下几点:
    业务用户想要执行什么样的分析?
    你现在收集的数据需要支持那些分析吗?
    数据在哪儿?
    数据清洗范围
    数据的清洁度如何?
    相似的数据有多个数据源吗?
    什么样的结构最适合核心数据仓库 (例如维度或关系型)?
    技术问题包括但不限于以下几点:
    在你的网络中要流通多少数据?它能处理吗?
    需要多少硬盘空间?
    硬盘存储需要多快?
    你会使用固态还是虚拟化的存储?

    2)建立数据模型和数据仓库的物理设计
    3)定义数据源
    4)选择数据仓库技术和平台
    5)从操作型数据库中抽取、净化、和转换数据到数据仓库–ETL依照模型进行初始加载、增量加载、缓慢增长维、慢速变化维、事实表加载等数据集成
    6)选择访问和报表工具
    7)选择数据库连接软件
    8)选择数据分析和数据展示软件
    9)更新数据仓库–并根据业务需求制定相应的加载策略、刷新策略、汇总策略、维护策略。

    较之数据库系统开发,数据仓库开发只多出ETL工程部分。然而这一部分极有可能是整个数据仓库开发流程中最为耗时耗资源的一个环节。
    因为该环节要整理各大业务系统中杂乱无章的数据并协调元数据上的差别,所以工作量很大。在很多公司都专门设有ETL工程师这样的岗位,大的公司甚至专门聘请ETL专家。

    [903014-20160322160747995-1497680833.jpg]

    展开全文
  • 本文主要介绍的HBase的基本使用以及Hbase的架构原理,使得读者对Hbase有一更好地认识。 一、HBase介绍 首先,看看官网对于Hbase的介绍: Apache HBase™ is the Hadoop database, a distribute...
  • 两个三选一完成两个寄存器的控制。 如下,一个二选一完成输出输出数据的控制。 运算器组成部分顺口溜 可以看出,三种功能都是通过三位控制码完成的,共9位控制码。 运算器的时钟信号CP 其始终与周期设计如上。各个...
  • 文章目录介绍组件推荐Git进阶功能分支控制创建、切换分支合并分支其他分支相关操作撤回修改提交记录合并标记不同步文件标签管理同一项目多远程Git仓库解决方案说明 介绍 本博客主要面向一些已经使用过Git的用户,对...
  • Android 的简介和体系结构中每层的功能。 1.简介 1.     Android是由Google公司和开放手机联盟领导并开发的一种基于Linux的自由且开放源代码的操作系统,主要使用于移动设备。 2.  ...
  • 2004年笔者进入公司后就从事数据仓库的工作,伴随着中国移动经营分析系统的发展而成长,主导过多次数据仓库的重构建设,见证了数据仓库从ORACLE到DB2、从DB2到ASTER、从ASTER到一体机、从一体机到GBASE、从GBASE拓展...
  • 仓库管理系统是典型的信息管理系统(MIS Management Information System),其开发主要包括后台数据库的建立和维护...经过本人近两个月的刻苦学习与实践,如期完成了系统的开发工作,实现了仓库管理系统一些基本功能
  • 文章目录docker镜像仓库——公有仓库和私有仓库Docker hub共有仓库注册 docker hub 账号登录docker hubpush本地镜像到docker hub注销登录registry搭建私有仓库获取...docker镜像仓库——公有仓库和私有仓库 Dock
  • 信息系统的五个基本功能:输入、存储、处理、输出和控制。输入功能:信息系统的输入功能决定于系统所要达到的目的及系统的能力和信息环境的许可。存储功能:存储功能指的是系统存储各种信息资料和数据的能力。处理功能...
  • 该数据需要一家,而数据湖是创建该家的首选解决方案。该术语由Pentaho的CTO James Dixon发明并首次描述,他在博客中写道:“如果您将数据集市视为瓶装水的存储库,经过清洗,包装和结构化以便于使用,那么数据湖就...
  • 数据仓库基本概念

    万次阅读 2011-08-12 08:35:27
    数据仓库是一面向主题的(Subject Oriented)、集成的(Integrate)、相对稳定的(Non-Volatile)、反映历史变化(Time Variant)的数据集合,它用于支持企业或组织的决策分析处理。 功能结构三层次:(数据采集、...
  • 鸿蒙2.0 134个仓库扼要说明

    千次阅读 2020-09-16 22:22:53
    鸿蒙 OS 开源项目:... 鸿蒙 OS 代码仓库:https://openharmony.gitee.com/ ... 仓库语言: C:67% C++:33% 各个仓库简介: aafwk_frameworks_kits_ability_lite Ability开发接口实现层 aafwk...
  • github如何删除一repository(仓库)

    千次阅读 2018-10-16 10:14:33
    如果小伙伴们跟着我的教程一步步做下来一定已经学会使用了git了,但是同时也有副产品出现了,就是我们学习过程中在GitHub上创建的仓库。这个仓库在以后的使用中是多余的,我们需要一干净的GitHub,里面只有我们...
  • 在计算机产业发展的70年时间里,每一次的 IT 革命,无不带来:更低廉的价格、更完善的功能、更便捷的使用、更广阔的市场! 大数据经过10年发展,现在已经到了一重要的分水岭阶段:通用性和兼容性能力成为大数据...
  • 例如username:myresp, password:456789 这两个密码是独立的,账号一致 如果已经有账号了就直接登录即可(仓库的账号用户名下面会用到) 接下就是创建命名空间,可以直接访问改地址https://cr.console.aliyun.com 也...
  • 分类目录:商业智能《数据仓库Hive编程》总目录 Hive支持关系型数据库中的大多数基本数据类型,...和大多数的数据库相比,Hive具有一独特的功能,那就是其对于数据在文件中的编码方式具有非常大的灵活性。大多数...
  • 在对数据仓库的概念有了基本的认识后,有必要单独说明一下ETL这最重要的过程,然后向读者介绍四种常见的数据仓库架构。本篇最后描述实时数据仓库的产生背景、特定需求和使用场景,并列举一些常见的实时数据仓库...
  • 此项目为仓库管理系统,是我大二下的实训课作业,虽然是从学期初开始写的,但是实际写项目的日子也就十多天(前面都没怎么动,果然只有临近ddl效率才高)。 到我写这篇博文的时候,实际上项目还有小部分功能未完成,...
  • 目录 信息技术智库 文章很长,前言一定要看 拥有本篇文章,意味着你拥有一本完善的书籍,本篇文章整理了数据仓库领域,几乎所有的知识点,文章内容主要来源于以下几方面: 源于「数据仓库交流群」资深数据仓库...
  • 0x00 前言 整理一些数据仓库中的常用概念。大部分概念不是照搬书上的准确定义,会加入很多自己的理解。...个人理解,数据仓库不单单是一概念,其实算是对数据管理和使用的一种方法论,它包括了如何
  • Git操作与仓库创建

    千次阅读 2022-02-08 20:02:35
    Git操作与仓库创建
  • 文章目录1 数仓分层1.1 基本分层模型1.2 数据集市和数据仓库2 数仓理论2.1 范式理论2.2 关系建模和维度建模2.2.1 关系建模2.2.2 维度建模2.2.2.1 维度建模的三种模型2.3 维度表和事实表2.3.1 维度表2.3.2 事实表 ...
  • 如何搭建一私有npm仓库

    万次阅读 2019-04-19 09:15:25
    业界主流的私有npm仓库搭建的主流方案有如下几种: 付费购买 使用 git+ssh 这种方式直接引用到 GitHub 项目地址 使用Sinopia 使用cnpmjs.org 第一种,一是考虑到公司可能不会提供经费,二npm在国内访问很慢,...
  • 数据仓库架构(内含PPT)

    千次阅读 多人点赞 2020-11-18 07:00:00
    大数据篇:一文读懂@数据仓库1 网络词汇总结1.1 数据中台数据中台是聚合和治理跨域数据,将数据抽象封装成服务,提供给前台以业务价值的逻辑概念。数据中台是一套可持续“让企业的数据用起来”...
  • Apache Zeppelin主要界面和基本操作

    千次阅读 2019-04-15 19:44:12
    本文针对的Zeppelin版本为0.8.1。 1. 首页功能 ...从文件导入一Notebook应用。 2 创建Notebook 创建新的Notebook应用,创建时可指定应用名称和默认代码解释器。 3 按名称筛选Notebook 4 Notebook列...
  • Gradle项目的jar发布到私有仓库

    千次阅读 2021-04-11 23:54:13
    Java程序员的基本功,一起走一
  • 数据仓库的理解

    千次阅读 多人点赞 2020-03-24 13:24:58
    数据仓库是一面向主题的(Subject Oriented)、集成的(Integrate)、相对稳定的(Non-Volatile)、反映历史变化(Time Variant)的数据集合,它用于支持企业或组织的决策分析处理。用于支持决策,面向分析型数据...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 127,896
精华内容 51,158
关键字:

仓库的两个基本功能