HIVE
数据仓库和数据库的区别
数据库与数据仓库的区别:实际讲的是OLTP与OLAP的区别
OLTP(On-Line Transaction Processin):叫联机事务处理,也可以称面向用户交易的处理系统, 主要面向用户进行增删改查
OLAP(On-Line Analytical Processing):叫联机分析处理,一般针对某些主题的历史数据进行分析 主要面向分析,支持管理决策。
数据仓库主要特征:
1.面向主题的(Subject-Oriented )
2.集成的(Integrated)
3.非易失的(Non-Volatile)
4.时变的(Time-Variant)
数据仓库的出现,并不是要取代数据库,主要区别如下:
数据库是面向事务的设计,数据仓库是面向主题设计的。
数据库是为捕获数据而设计,数据仓库是为分析数据而设计
数据库一般存储业务数据,数据仓库存储的一般是历史数据。
数据库设计是尽量避免冗余,一般针对某一业务应用进行设计,比如一张简单的User表,记录用户名、密码等简单数据即可,符合业务应用,但是不符合分析。
数据仓库在设计是有意引入冗余,依照分析需求,分析维度、分析指标进行设计。
数据库的操作
知识点
注意: location路径默认是: hdfs://node1:8020/user/hive/warehouse
删除数据库: drop database 数据库名 [cascade];
修改数据库路径: alter database 库名 set location 'hdfs://node1.itcast.cn:8020/路径'
修改数据库属性: alter database 库名 set dbproperties ('k'='v');
修改当前数据库: use 库名;
查看指定数据库信息: desc database 库名;
查看指定数据库扩展信息: desc database extended 库名;
查看当前使用的数据库: select current_database();
查看所有的数据库: show databases;
查看某库建库语句: show create database 库名;
练习
create database db1;
create database if not exists db2;
create database if not exists db3 comment 'db3' ;
create database if not exists db4 comment 'db4' location '/binzi';
create database if not exists db5 comment 'db5' location '/binzi' with dbproperties ('binzi'='666');
-- 查看所有数据库
show databases;
-- 查看指定数据库信息
desc database db2;
desc database db4;
desc database db5;
-- 查看指定数据库的扩展信息
desc database extended db5;
-- 查看当前使用的数据库
select current_database();
-- 查看指定建库语句
show create database db2;1
-- 删除空数据库
drop database db1;
-- 注意: db4和db5共用一个路径,删除db4直接把对应路径删除
drop database db4;
-- 演示在db5创建数据表(仅用于测试)
-- 切换/使用数据库
use db5;
-- 注意: 如果没有对应的location路径,建表的时候会先创建对应location路径
create table test1(id int ,name string);
-- 删除有表的数据库
-- 注意: drop不能直接删除有表的数据库
drop database db5; -- 报错
-- cascade关键字: 删除有表的数据库
drop database db5 cascade ;
-- 查看当前使用的数据库
select current_database();
-- 查看所有数据库
show databases;
-- 为了测试创建一个数据库,默认路径: /user/hive/warehouse/db5.db
create database if not exists db5 with dbproperties ('binzi'='666');
-- 创建测试表路径默认到/user/hive/warehouse/db5.db/test1
create table test1(id int ,name string);
-- 修改路径location
-- 注意: 修改路径仅针对后面创建的表存储位置发生改变,原来已有的表路径不变
alter database db5 set location 'hdfs://node1.itcast.cn:8020/binzi';
desc database db5;
-- 再次创建测试表,路径存储到新的location位置/binzi/test2
create table test2(id int ,name string);
-- 修改数据库属性
-- 先查看属性
desc database extended db5;
-- 修改属性
alter database db5 set dbproperties ('binzi'='888');
-- 再次查看属性
desc database extended db5;
数据表的操作
分隔符
默认分隔符: 展示形式是 SOH , /0001 ,□等
自定义分隔符:...row format delimited fields terminated by '指定分隔符'
内部表
知识点
删除内部表: drop table 内部表名; 注意: 删除mysql中元数据同时也会删除hdfs中存储数据
修改表名: alter table 旧表名 rename to 新表名;
修改表字段名称和类型: alter table 表名 change 旧字段名 新字段名 新字段类型;
修改表之添加字段(列): alter table 表名 add columns (字段名 字段类型);
修改表之替换字段(列):alter table 表名 replace columns (字段名 字段类型);
查看所有表: show tables;
查看指定表基本信息: desc 表名;
查看指定表扩展信息: desc extended 表名;
查看指定表格式信息: desc formatted 表名;
查看指定表建表语句: show create table 表名;
练习
create database myhive;
use myhive;
-- 1.内部表操作: 创建内部表
-- 创建普通数据表
create table if not exists stu(id int ,name string);
-- 插入数据
insert into stu values(1,'张三');
-- 查询所有数据
select * from stu;
-- 上述stu使用的是默认分隔符:展示形式是 /0001,SOH,□...
-- 键盘不好输入,需要自定指定分隔符
--
-- 创建普通数据表: 指定分隔符
create table if not exists stu1(
id int ,
name string
)
row format delimited fields terminated by ',';
-- 插入数据
insert into stu1 values(1,'李四');
-- 查询所有数据
select * from stu1;
-- 其他创建内部表的形式
-- 建表时复制其他表的结构和数据: create table 表名 as select语句
create table stu2 as select * from stu1;
-- 建表时复制其他表的结构: create table 表名 like 其他表名;
create table stu3 like stu1;
-- 2.查看表
-- 查看所有表
show tables;
-- 查看指定表基本信息
desc stu1;
-- 查看指定表扩展信息
desc extended stu1;
-- 查看指定表格式后的信息
desc formatted stu1;
-- 查看指定表建表语句
show create table stu1;
-- 3.修改表
-- 修改表名
alter table stu1 rename to stu111;
-- 修改表字段:添加列
alter table stu2 add columns (gender int);
-- 修改表字段:改名称和类型
alter table stu2 change id sid string;
-- 修改表字段:替换列(删除/添加)
alter table stu2 replace columns (sid string);
alter table stu2 replace columns (sid string,age int);
-- 4.删除表
drop table stu111;
truncate table stu;
请简述hive元数据服务配置的三种模式?
参考答案:
内嵌模式:
优点: 配置简单 hive命令直接可以使用
缺点: 不适用于生产环境,derby和Metastore服务都嵌入在主Hive Server进程中,一个服务只能被一个客户端连接(如果用两个客户端以上就非常浪费资源),且元数据不能共享
本地模式:
优点:可以单独使用外部的数据库(mysql),元数据共享
缺点:相对浪费资源,metastore嵌入到了hive进程中,每启动一次hive服务,都内置启动了一个metastore。
远程模式:
优点:可以单独使用外部库(mysql),可以共享元数据,本地可以连接metastore服务也可以连接hiveserver2服务,增加了扩展性(其他依赖hive的软件都可以通过Metastore访问hive)
缺点:需要注意的是如果想要启动hiveserver2服务需要先启动metastore服务
数据库和数据仓库的区别?
参考答案:
数据仓库与数据库的区别:实际讲的是OLTP与OLAP的区别,OLTP(On-Line Transaction Processin):叫联机事务处理,也可以称面向用户交易的处理系统,主要面向用户进行增删改查,OLAP(On-Line Analytical Processing):叫联机分析处理,一般针对某些主题的历史数据进行分析 主要面向分析,支持管理决策。
数据仓库的出现,并不是要取代数据库,主要区别如下:数据库是面向事务的设计,数据仓库是面向主题设计的。数据库是为捕获数据而设计,数据仓库是为分析数据而设计.数据库一般存储业务数据,数据仓库存储的一般是历史数据。数据库设计是尽量避免冗余,一般针对某一业务应用进行设计,比如一张简单的User表,记录用户名、密码等简单数据即可,符合业务应用,但是不符合分析。数据仓库在设计是有意引入冗余,依照分析需求,分析维度、分析指标进行设计。
简述下数仓经典三层架构?
参考答案:
数据仓库是一个面向主题的、集成的、持久的(非易失的)、反映历史变化(随时间变化),用来支持管理人员决策的数据集合,按照数据流入流出的过程,数据仓库架构可分为三层——源数据层、数据仓库层、数据应用层。
源数据层(ODS-Operational Data Store):此层数据无任何更改,直接沿用外围系统数据结构和数据,不对外开放;为临时存储层,是接口数据的临时存储区域,为后一步的数据处理做准备。
数据仓库层(DW-Data Warehouse):也称为细节层,DW层的数据应该是一致的、准确的、干净的数据,即对源系统数据进行了清洗(去除了杂质)后的数据。
数据应用层(DA-Data Application):前端应用直接读取的数据源;根据报表、专题分析需求而计算生成的数据。