Hive本质、外部表、分区表优点与DDL语句

1、什么是Hive?

Hive是基于Hadoop的一个数据仓库工具,将结构化的数据文件映射为一张表,提供与SQL类似的查询功能。

1.1本质

将HQL转换成MR程序
Hive处理的数据存储在HDFS上,分析数据由MR实现,执行程序在YARN上。

优点:适合处理对实时性要求不高的大数据。
缺点:不适合迭代算法、数据挖掘。

1.2 Hive框架的驱动器具有哪些?

(1)解析器(SQL Parser):将SQL字符串转换成抽象语法树(AST),这一步一般都用第三方工具库完成,比如antlr;对AST进行语法分析,比如表是否存在、字段是否存在、SQL语义是否有误。
(2)编译器(Physical Plan):将AST编译生成逻辑执行计划。
(3)优化器(Query Optimizer):对逻辑执行计划进行优化。
(4)执行器(Execution):把逻辑执行计划转换成可以运行的物理计划。对于Hive来说,就是MR/Spark/Flink。

2、Hive的元数据是什么?

数仓的元数据是关于数据仓库中数据的数据。类似于数据库管理系统的数据字典,保存了逻辑数据结构、文件、地址和索引等信息。
元数据包括:表名、表所属的数据库(默认是default)、表的拥有者、列/分区字段、表的类型(是否是外部表)、表的数据所在目录等。
元数据存储在关系型数据库中。(还有以数据集为基础的存储方式)

3、外部表的优点

Hive的外部表相对内部表(管理表)更安全。因为外部表被删除时,删除的时描述表的元数据信息,而不是删除该表数据,内部表则会删除表中数据。内部表通常是创建临时表使用。

4、分区表

Hive分区就是分目录,把一个大的数据集根据业务需要分割成小的数据集。

4.1 分区表的特点

提高查询效率。可以进行多级分区。

4.2 分区表的优点

为什么提高查询效率?
分区之后,使用WHERE语句限定需要查找表的分区信息。首先去访问元数据库(sql),找HDFS对应的实际数据的路径,由于执行WHERE语句时获取分区信息,则在未访问HDFS之前,就已经知道之后访问HDFS的具体目录。

如果缺乏分区元数据信息,或缺乏数据该怎么办?
1)使用load命令,既添加分区元数据信息,又上传数据。
2)msck repair table 表名(),多在有很多分区信息需要修复的情况下使用。
3)上传数据后,添加分区信息alter table 表名 add partition(分区信息);

5. 数据库DDL操作

5.1 创建、查询(与SQL基本类似)

创建

create database if not exists 库名;

查询

show databases;

查询数据库的详细信息

desc database extended db_hive;

删除

drop database 数据库名;

5.2 修改、增加数据库信息

在Hive中,数据库的元数据信息是不可更改的。
通常是增加或修改描述数据库属性信息

alter database 数据库名 set dbproperties('键'='值');

5.3 表的创建(常用字段)

CREATE [EXTERNAL] TABLE [IF NOT EXISTS] 表名
(col_name data_type [COMMENT col_comment], ...)]
COMMENT table_comment]
PARTITIONED BY (col_name data_type [COMMENT col_comment], ...)
CLUSTERED BY (col_name, col_name, ...) 
ROW FORMAT row_format
STORED AS file_format
LOCATION hdfs_path

最基本的建表

CREATE TABLE 表名

EXTERNAL:创建一个外部表,可以在创建时,指定LOCATION将HDFS上面的数据和该表关联起来,数据共享。也可以创建完之后Load Data。

COMMENT:为表和列添加注释

PARTITIONED BY:创建分区表

CLUSTERED BY:创建分桶表

ROW FORMAT:数据切分格式
[FIELDS TERMINATED BY char] 字段切分
[COLLECTION ITEMS TERMINATED BY char] 数组集合的切分
[MAP KEYS TERMINATED BY char] Map类型的键值对切分

举个栗子:
1,Tom;Jerry,China-Beijing

上述数据的切分格式:
FIELDS TERMINATED BY ‘,’
COLLECTION ITEMS TERMINATED BY ‘;’
MAP KEYS TERMINATED BY ‘-’

STORED AS:指定存储文件类型
如果某个与现有表结构相似,不要忘了LIKE,复制结构,建表又快又准备。

LOCATION hdfs_path:上传到指定路径地址

5.4 内部、外部表转换

alter table 表名 set tblproperties('EXTERNAL'='TRUE'|'FALSE');

显然内部转外部 ‘EXTERNAL’=‘TRUE’
外部转内部 ‘EXTERNAL’=‘FALSE’

5.5 分区表查询

分区表查询需要使用WHERE关键字,将筛选分区信息

SELECT * FROM 表名 WHERE 分区信息;

6. 增、改,替换、删除

6.1 增、改(与SQL一致)

增(列、分区):add

ALTER TABLE 表名 ADD COLUMNS (列名 数据类型, ...) 

ALTER TABLE 表名 ADD PARTITION(分区信息) 
# 一次性添加多个
ALTER TABLE 表名 ADD PARTITION(分区信息) PARTITION(分区信息) 

改(表):rename to

ALTER TABLE 旧表名 RENAME TO 新表名

改(列):change

ALTER TABLE 表名 CHANGE COLUMN 旧的列名 新的列名 新列的类型 [FIRST|AFTER 列名]

6.2 替换(replace替换展示出来的是整个替换出来的表)

替换:replace

ALTER TABLE 表名 REPLACE COLUMNS (列名 数据类型, ...)

Mysql中的replace方法用来改变某列的值中的某些字符,更新替换或者插入替换

UPDATE 表名 SET 列名 = REPLACE(列名, 替换目标, 替换值);

6.3 删除数据库、表名、索引、视图

drop database \ table \ index \ view 名;
drop database 数据库名 cascade; (数据库不为空的情况下)

删除分区也用drop

alter table 表名 drop partition (分区信息);
# 删除多个
alter table 表名 drop partition (分区信息),partition (分区信息),...;

7. 小结

Hive的本质需要清楚,用于共享的数据通常建立外部表去处理,数据只是暂时处理,可以使用内部表(管理表),大多数分区表针对时间进行分区。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

SYBY

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值