数据仓储设计的基本概念
一、维度建模基本概念
维度建模(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'`
数据仓储设计的基本概念相关推荐
- 后台管理框架之五 :数据仓储设计
前面已经介绍了数据持久化部分的数据模型设计,现在我们来介绍数据操作部分的设计,也就是数据的增.删.改.查等CRUDQ操作的仓储设计.仓储设计主要依照以下几个思路: 一. 本项目数据操作 ...
- Unity DOTS 学习笔记2 - 面向数据设计的基本概念(上)
上一章,我们安装了ECS套件,也进行了一些介绍,但是比较笼统.没有一些基础知识储备,很难开始编写代码.本章首先翻译和整理了部分Unity官方的DOTS知识,需要对面向数据有更深刻的认识. DOD知识准 ...
- 数据仓库架构设计的一点概念
1.数据仓库所处环节 在一个成体系.结构化的数据应用场景下,数据和处理有四个层次: 操作层.数据仓库层.部门/数据集市层.个体层. 操作层 操作层是指为具体业务提供实时响应的各个业务系统,比如常见的订 ...
- 微服务开发中的数据架构设计
前言 微服务是当前非常流行的技术框架,通过服务的小型化.原子化以及分布式架构的弹性伸缩和高可用性,可以实现业务之间的松耦合.业务的灵活调整组合以及系统的高可用性.为业务创新和业务持续提供了一个良好的基 ...
- 数据中台(三)数据中台设计与数据资产管理
企业的发展,往往伴随着业务更多元化,也必然会促进更多的业务数据产生,也为企业实现业务数据化和数据业务化带来了更多的可能性,但现实是很多企业依然采用传统理念去建设大数据平台,导致不单单业务系统是一个个烟 ...
- Java生鲜电商平台-SpringCloud微服务开发中的数据架构设计实战精讲
Java生鲜电商平台-SpringCloud微服务开发中的数据架构设计实战精讲 Java生鲜电商平台: 微服务是当前非常流行的技术框架,通过服务的小型化.原子化以及分布式架构的弹性伸缩和高可用性, ...
- (转)超全面设计指南:如何做大屏数据可视化设计?
数据可视化是一门庞大系统的科学,本文所有讨论仅针对大屏数据可视化这一特定领域.管中窥豹,如有遗漏或不足之处欢迎大家讨论交流. 文章结构及思维导图: 一.基础概念 1. 什么是数据可视化 把相对复杂.抽 ...
- 高性能MMORPG服务端引擎设计之基本概念
本文版权归 博客园 亚历山大同志 所有,如有转载,请按如下方式标明出处,以示尊重! 作者博客:懒人居 - Coding for fun 原文地址:高性能MMORPG通用服务端引擎设计之->基本概 ...
- 微服务开发中的数据架构设计 1
GitChat 作者:陈伟荣 原文:微服务开发中的数据架构设计 关注微信公众号:「GitChat 技术杂谈」 一本正经的讲技术 [不要错过文末彩蛋] 前言 微服务是当前非常流行的技术框架,通过服务的小 ...
最新文章
- 抽取、转换和装载介绍(八)实时的意义(待续)
- Spring AOP实现原理解析
- 计算机算法设计与分析考试题,《计算机算法设计与分析》习题及答案
- 解决bbb无法加载uImage问题
- canvas绘制线条1像素的问题
- SpringBoot使用外置的Servlet容器
- java分布式dubbo_Dubbo剖析-搭建一个简单的分布式系统(1)
- linux as5 启动mysql_RedHat AS5 PHP添加JSON模块
- 全美首个AI本科专业今秋开课,CMU每年最多招35名新生
- 不创建临时变量,交换两整数的值
- 宝塔面板 python管理器2.0安装Mrdoc
- ldap 身份认证 概念和原理介绍
- Cdn英文的读音音标_教育 | 老司机请回答:孩子学英文自然拼读和中文拼音会不会混?...
- QQ聊天记录的相关代码
- 重装系统后计算机无法启动,重装系统后电脑为什么启动不了?云骑士告诉你怎么办?...
- 逃离华强北后 他们去哪儿?采访身边真实故事——华强北电脑维修 内迁 张家界电脑维修 电子市场电脑维修
- CSR867x — 如何修改BLE的蓝牙地址
- 第一章 初探Swing
- JavaScript数字运算必备库——big.js源码解析
- python文件打包成之pyinstaller使用