目录
数仓和数据库的区别
操作型处理(数据库),叫联机事务处理OLTP(On-Line Transaction Processing),也可以称面向用户交易的 处理系统,它是针对具体业务在数据库联机的日常操作,通常进行增删改查操作。
分析型处理(数据仓库),叫联机分析处理OLAP(On-Line Analytical Processing),也可以称为面向专业分析 人员进行数据分析,通常进行查询分析操作,一般针对某些主题的历史数据进行分析,支持管理决策。
数据仓库主要特征: 面向主题的(Subject-Oriented )、集成的(Integrated)、非易失的(Non-Volatile)和时变的(Time-Variant )
- 数据库是面向事务的设计,数据仓库是面向主题设计的。
- 数据库一般存储业务数据,数据仓库存储的一般是历史数据。
- 数据库是为捕获数据而设计,数据仓库是为分析数据而设计
- 数据库设计是尽量避免冗余,一般针对某一业务应用进行设计,比如一张简单的User表,记录用户名、密码等简单 数据即可,符合业务应用,但是不符合分析。数据仓库在设计是有意引入冗余,依照分析需求,分析维度、分析指标进行设计。
源数据层(ODS):此层数据无任何更改,直接沿用外围系统数据结构和数据, 不对外开放;为临时存储层,是接口数据的临时存储区域,为后一步的数据处理做 准备。
数据仓库层(DW):也称为细节层,DW层的数据应该是一致的、准确的、干 净的数据,即对源系统数据进行了清洗(去除了杂质)后的数据。
数据应用层(DA或APP):前端应用直接读取的数据源;根据报表、专题分析 需求而计算生成的数据。
数据仓库从各数据源获取数据及在数据仓库内的数据转换和流动都可以认为是ETL(抽取Extract, 转 化Transform , 装载Load)的过程。
数据库操作
- 创建数据库
create database if not exists myhive;
use myhive;
- 查看数据库详细信息
desc database myhive;
数据库本质上就是在HDFS之上的文件夹。
默认数据库的存放路径是HDFS的:/user/hive/warehouse内
-
创建数据库并指定hdfs存储位置
create database myhive2 location '/myhive2';
使用location关键字,可以指定数据库在HDFS的存储路径。
-
删除一个空数据库,如果数据库下面有数据表,那么就会报错
drop database myhive;
-
强制删除数据库,包含数据库下面的表一起删除
drop database myhive2 cascade;
1. 创建库的语法
CREATE DATABASE [IF NOT EXISTS] db_name [LOCATION position];
2. 删除库的语法为
DROP DATABASE db_name [CASCADE];
3. 数据库和HDFS的关系
Hive的库在HDFS上就是一个以.db结尾的目录
默认存储在:/user/hive/warehouse内
可以通过LOCATION关键字在创建的时候指定存储目录
数据表操作
其中红色的是使用比较多的类型
内部表和外部表
内部表(CREATE TABLE table_name ...)
未被external关键字修饰的即是内部表,内部表又称管理表或者托管表。
删除内部表:直接删除元数据和存储的业务数据
外部表(CREATE EXTERNAL TABLE table_name ...)
被external关键字修饰的即是外部表,外部表又称非管理表或者非托管表。
删除外部表:仅仅是删除元数据,存储的业务数据并不会被删除
查看所有表:
show tables;
查看建表语句:
show create table表名;
查看表结构信息:
desc表名
查看表格式化信息:
desc formatted表名;
修改表名:
alter table旧表名 rename to新表名;
修改表路径:
alter table表名 set location 'hdfs中存储路径';
修改表属性:
alter table表名set tblproperties ('属性名'='属性值');
内部表转外部表
alter table stu set tblproperties('EXTERNAL'='TRUE');
外部表转内部表
alter table stu set tblproperties('EXTERNAL'='FALSE');
Hive的默认字段分隔符:\001(^A)是一种特殊字符,是ASCII值在Notepad++文本编辑器中是显示为SOH的。
Hive表指定字段间分隔符的语法是:
row format delimited fields terminated by '分隔符