一、维度建模基本概念

    维度建模(dimensional modeling)是专门用于分析型数据库、数据仓库、数
据集市建模的方法。数据集市可以理解为是一种"小型数据仓库"。

维度表

    维度表示你要对数据进行分析时所用的一个量,比如你要分析产品销售情况,
你可以选择按类别来进行分析,或按区域来分析。

事实表

    表示对分析主题的度量。事实表包含了与各维度表相关联的外键,并通过
JOIN 方式与维度表关联。

总结

    事实表的设计是以能够正确记录历史信息为准则,维度表的设计是以能够
以合适的角度来聚合主题内容为准则。

维度建模的三种模式
1.星型模式

    星形模式(Star Schema)是最常用的维度建模方式。星型模式是以事实表为
中心,所有的维度表直接连接在事实表上,像星星一样。

特点:

a. 维表只和事实表关联,维表之间没有关联;
b. 每个维表主键为单列,且该主键放置在事实表中,作为两边连接的外键;
c. 以事实表为核心,维表围绕核心呈星形分布;


2.雪花模式

    雪花模式(Snowflake Schema)是对星形模式的扩展。雪花模式的维度表可以
拥有其他维度表的,

缺点:

    这种模型相比星型更规范一些,但是由于这种模型不太
容易理解,维护成本比较高,而且性能方面需要关联多层维表,性能也比星型模
型要低。所以一般不是很常用。

3.星座模式

    星座模式是星型模式延伸而来,星型模式是基于一张事实表的,而星座模式
是基于多张事实表的,而且共享维度信息。

特点:

    两种维度建模方法都是多维表对应单事实表,但在很多时候维度
空间内的事实表不止一个,而一个维表也可能被多个事实表用到

事实表设计:

维度表设计:

二、模块开发——ETL
TL 工作的实质就是从各个数据源提取数据,对数据进行转换,并最终加载
填充数据到数据仓库维度建模后的表中。

几个特殊的解析:

"http://www.google.com/url?sa=t&rct=j&q=nodejs%20%E5%BC%82%E6%AD%A5%E5%B9%BF%E6%92%AD&source=web&cd=1&cad=rja&ved=0CCgQFjAA&url=%68%74%74%70%3a%2f%2f%62%6c%6f%67%2e%66%65%6e%73%2e%6d%65%2f%6e%6f%64%65%6a%73%2d%73%6f%63%6b%65%74%69%6f%2d%63%68%61%74%2f&ei=rko5UrylAefOiAe7_IGQBw&usg=AFQjCNG6YWoZsJ_bSj8kTnMHcH51hYQkAA&bvm=bv.52288139,d.aGc"
create table t_ods_tmp_referurl as
SELECT a.*,b.*
FROM ods_weblog_origin a
LATERAL VIEW parse_url_tuple(regexp_replace(http_referer, "\"", ""),
'HOST', 'PATH','QUERY', 'QUERY:id') b as host, path, query, query_id;
lateral view 用于和 split, explode 等 UDTF 一起使用,它能够将一列数据拆成
多行数据。
UDTF(User-Defined Table-Generating Functions) 用来解决输入一行输出多行(On-
to-many maping) 的需求。Explode 也是拆列函数,比如 Explode (ARRAY) ,array 中的每
个元素生成一行。

二、模块开发——统计分析

三、模块开发——结果导出

1.Apahe Sqoop

    SqoopHadoop  和关系数据库服务器之间传送数据的一种工具
它是用来从关系数据
库如:MySQL,Oracle 到 Hadoop 的 HDFS,并从 Hadoop 的文件系统导出数据到关系数据
库。由 Apache 软件基金会提供。
Sqoop:“SQL 到 Hadoop 和 Hadoop 到 SQL”。

    Sqoop 工作机制是将导入或导出命令翻译成 mapreduce 程序来实现。
在翻译出的 mapreduce 中主要是对 inputformat 和 outputformat 进行定制。

四、Sqoop安装

安装 sqoop 的前提是已经具备 java 和 hadoop 的环境。
最新稳定版: 1.4.6
配置文件修改:

cd $SQOOP_HOME/conf
mv sqoop-env-template.sh sqoop-env.sh
vi sqoop-env.sh
export HADOOP_COMMON_HOME=/root/apps/hadoop/
export HADOOP_MAPRED_HOME=/root/apps/hadoop/
export HIVE_HOME=/root/apps/hive
加入 mysql 的 jdbc 驱动包
cp /hive/lib/mysql-connector-java-5.1.28.jar $SQOOP_HOME/lib/
验证启动
bin/sqoop list-databases --connect jdbc:mysql://localhost:3306/ --
username root --password hadoop
本命令会列出所有 mysql 的数据库。
到这里,整个 Sqoop 安装工作完成。

Sqoop导入

“导入工具”导入单个表从 RDBMS 到 HDFS。表中的每一行被视为 HDFS 的记录。所有记
录都存储为文本文件的文本数据(或者 Avro、sequence 文件等二进制数据)。
下面的语法用于将数据导入 HDFS。
$ sqoop import (generic-args) (import-args)
Sqoop 测试表数据
在 mysql 中创建数据库 userdb,然后执行参考资料中的 sql 脚本:
创建三张表: emp emp_add emp_conn。

导入mysql表数据到HDFS
下面的命令用于从 MySQL 数据库服务器中的 emp 表导入 HDFS。

bin/sqoop import \
--connect jdbc:mysql://node-21:3306/sqoopdb \
--username root \
--password hadoop \
--target-dir /sqoopresult \
--table emp --m 1

其中–target-dir 可以用来指定导出数据存放至 HDFS 的目录;
mysql jdbc url 请使用 ip 地址。
为了验证在 HDFS 导入的数据,请使用以下命令查看导入的数据:

hdfs dfs -cat /sqoopresult/part-m-00000

可以看出它会用逗号,分隔 emp 表的数据和字段。

导入mysql表数据到HIVE
将关系型数据的表结构复制到 hive 中

bin/sqoop create-hive-table \
--connect jdbc:mysql://node-21:3306/sqoopdb \
--table emp_add \
--username root \
--password hadoop \
--hive-table test.emp_add_sp

其中:
–table emp_add 为 mysql 中的数据库 sqoopdb 中的表。
–hive-table emp_add_sp 为 hive 中新建的表名称。

从关系数据库导入文件到 hive 中

bin/sqoop import \
--connect jdbc:mysql://node-21:3306/sqoopdb \
--username root \
--password hadoop \
--table emp_add \
--hive-table test.emp_add_sp \
--hive-import \
--m 1

使用-m参数指定map个数

导入表数据子集
–where 可以指定从关系数据库导入数据时的查询条件。它执行在各自的数据库服务器
相应的 SQL 查询,并将结果存储在 HDFS 的目标目录。

bin/sqoop import \
--connect jdbc:mysql://node-21:3306/sqoopdb \
--username root \
--password hadoop \
--where "city ='sec-bad'" \
--target-dir /wherequery \
--table emp_add --m 1

复杂查询条件:

bin/sqoop import \
--connect jdbc:mysql://node-21:3306/sqoopdb \
--username root \
--password hadoop \
--target-dir /wherequery12 \
--query 'select id,name,deg from emp WHERE id>1203 and $CONDITIONS' \
--split-by id \
--fields-terminated-by '\t' \
--m 1

增量导入

增量导入是仅导入新添加的表中的行的技术。
--check-column (col)  用来作为判断的列名,如 id
--incremental (mode)  append:追加,比如对大于 last-value 指定的值之后的记录进
行追加导入。lastmodified:最后的修改时间,追加 last-value
指定的日期之后的记录
--last-value (value)  指定自从上次导入后列的最大值(大于该指定的值),也可以自
己设定某一值
假设新添加的数据转换成 emp 表如下:
1206, satish p, grp des, 20000, GR
下面的命令用于在 EMP 表执行增量导入:
bin/sqoop import \
--connect jdbc:mysql://node-21:3306/sqoopdb \
--username root \
--password hadoop \
--table emp --m 1 \
--incremental append \
--check-column id \
--last-value 1205

Sqoop导出

将数据从 HDFS 导出到 RDBMS 数据库导出前,目标表必须存在于目标数据库中。
默认操作是从将文件中的数据使用INSERT语句插入到表中,更新模式下,是生成UPDATE
语句更新表数据。
以下是 export 命令语法:
$ sqoop export (generic-args) (export-args)

导出HDFS数据刅mysql
数据是在 HDFS 中“emp/”目录的 emp_data 文件中:
1

201,gopal,manager,50000,TP
1202,manisha,preader,50000,TP
1203,kalil,php dev,30000,AC
1204,prasanth,php dev,30000,AC
1205,kranthi,admin,20000,TP
1206,satishp,grpdes,20000,GR

首先需要手动创建 mysql 中的目标表:

mysql> USE sqoopdb;
mysql> CREATE TABLE employee (
id INT NOT NULL PRIMARY KEY,
name VARCHAR(20),
deg VARCHAR(20),
salary INT,
dept VARCHAR(10));

然后执行导出命令:

bin/sqoop export \
--connect jdbc:mysql://node-21:3306/sqoopdb \
--username root \
--password hadoop \
--table employee \
--export-dir /emp/emp_data

还可以用下面命令指定输入文件的分隔符

--input-fields-terminated-by '\t'`

数据仓储设计的基本概念相关推荐

  1. 后台管理框架之五 :数据仓储设计

    前面已经介绍了数据持久化部分的数据模型设计,现在我们来介绍数据操作部分的设计,也就是数据的增.删.改.查等CRUDQ操作的仓储设计.仓储设计主要依照以下几个思路: 一.         本项目数据操作 ...

  2. Unity DOTS 学习笔记2 - 面向数据设计的基本概念(上)

    上一章,我们安装了ECS套件,也进行了一些介绍,但是比较笼统.没有一些基础知识储备,很难开始编写代码.本章首先翻译和整理了部分Unity官方的DOTS知识,需要对面向数据有更深刻的认识. DOD知识准 ...

  3. 数据仓库架构设计的一点概念

    1.数据仓库所处环节 在一个成体系.结构化的数据应用场景下,数据和处理有四个层次: 操作层.数据仓库层.部门/数据集市层.个体层. 操作层 操作层是指为具体业务提供实时响应的各个业务系统,比如常见的订 ...

  4. 微服务开发中的数据架构设计

    前言 微服务是当前非常流行的技术框架,通过服务的小型化.原子化以及分布式架构的弹性伸缩和高可用性,可以实现业务之间的松耦合.业务的灵活调整组合以及系统的高可用性.为业务创新和业务持续提供了一个良好的基 ...

  5. 数据中台(三)数据中台设计与数据资产管理

    企业的发展,往往伴随着业务更多元化,也必然会促进更多的业务数据产生,也为企业实现业务数据化和数据业务化带来了更多的可能性,但现实是很多企业依然采用传统理念去建设大数据平台,导致不单单业务系统是一个个烟 ...

  6. Java生鲜电商平台-SpringCloud微服务开发中的数据架构设计实战精讲

    Java生鲜电商平台-SpringCloud微服务开发中的数据架构设计实战精讲 Java生鲜电商平台:   微服务是当前非常流行的技术框架,通过服务的小型化.原子化以及分布式架构的弹性伸缩和高可用性, ...

  7. (转)超全面设计指南:如何做大屏数据可视化设计?

    数据可视化是一门庞大系统的科学,本文所有讨论仅针对大屏数据可视化这一特定领域.管中窥豹,如有遗漏或不足之处欢迎大家讨论交流. 文章结构及思维导图: 一.基础概念 1. 什么是数据可视化 把相对复杂.抽 ...

  8. 高性能MMORPG服务端引擎设计之基本概念

    本文版权归 博客园 亚历山大同志 所有,如有转载,请按如下方式标明出处,以示尊重! 作者博客:懒人居 - Coding for fun 原文地址:高性能MMORPG通用服务端引擎设计之->基本概 ...

  9. 微服务开发中的数据架构设计 1

    GitChat 作者:陈伟荣 原文:微服务开发中的数据架构设计 关注微信公众号:「GitChat 技术杂谈」 一本正经的讲技术 [不要错过文末彩蛋] 前言 微服务是当前非常流行的技术框架,通过服务的小 ...

最新文章

  1. 抽取、转换和装载介绍(八)实时的意义(待续)
  2. Spring AOP实现原理解析
  3. 计算机算法设计与分析考试题,《计算机算法设计与分析》习题及答案
  4. 解决bbb无法加载uImage问题
  5. canvas绘制线条1像素的问题
  6. SpringBoot使用外置的Servlet容器
  7. java分布式dubbo_Dubbo剖析-搭建一个简单的分布式系统(1)
  8. linux as5 启动mysql_RedHat AS5 PHP添加JSON模块
  9. 全美首个AI本科专业今秋开课,CMU每年最多招35名新生
  10. 不创建临时变量,交换两整数的值
  11. 宝塔面板 python管理器2.0安装Mrdoc
  12. ldap 身份认证 概念和原理介绍
  13. Cdn英文的读音音标_教育 | 老司机请回答:孩子学英文自然拼读和中文拼音会不会混?...
  14. QQ聊天记录的相关代码
  15. 重装系统后计算机无法启动,重装系统后电脑为什么启动不了?云骑士告诉你怎么办?...
  16. 逃离华强北后 他们去哪儿?采访身边真实故事——华强北电脑维修 内迁 张家界电脑维修 电子市场电脑维修
  17. CSR867x — 如何修改BLE的蓝牙地址
  18. 第一章 初探Swing
  19. JavaScript数字运算必备库——big.js源码解析
  20. python文件打包成之pyinstaller使用

热门文章

  1. ar 微信小程序_【看一看案例集】AR+微信小程序(1):认识篇
  2. NeurIPS 2020 | 基于能量的OOD检测
  3. php教程--案例20(用户登录)
  4. 本地局域网内linux为nginx搭建https
  5. centOS中安装浏览器
  6. 骑士周游 JAVA实现
  7. mysql or不走索引分析
  8. 人工智能技术:如何应对未来的挑战和机遇
  9. c#如何将double转换成int
  10. Jodd 5.0 使用自定义WebApp及设置默认拦截器