Hive 基础

Posted 法海你懂不

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Hive 基础相关的知识,希望对你有一定的参考价值。

Hive中并没有键的概念,但是用户可以对表建立索引。
Hive只有有限的索引功能,一张表的索引数据存储在另外一张表中。

Hive没有主键或基于序列密钥生成的自增键的概念,如果可以的话,应避免对非标准化数据进行JOIN操作。复杂的数据类型,比如array,map和struct有助于实现在单行中存储一对多数据。

CSV格式:值是用逗号分隔的
TSV格式:值是制表键分隔的

命名空间

Hive中数据库概念本质上仅仅是表的一个目录或者命名空间,这样做可以避免表命名冲突。如果用户没有显式指定数据库,那么将会使用默认的数据库default。

Hive会为每个数据库创建一个目录。数据库中的表将会以这个数据库目录的子目录形式存储,但是default数据库是个例外。因为该数据库本身没有自己的目录。

Hive QL是Hive查询语言,和普遍使用的SQL方言一样,并不完全遵守任意一种ANSI SQL标准的修订版。

内部表和外部表

内部表:Hive会或多或少控制着数据的生命周期
外部表:Hive并非完全拥有这份数据,因此删除该表并不会删除掉这份数据,不过描述表的元数据信息会被删除掉。

Hive默认情况下会将表的数据存储在由配置项hive.metastore.warehouse.dir,如/user/hive/warehouse所定义的目录的子目录下。这种表即管理表,有时也称为内部表。当删除管理表时,也会删除定义在该目录下对应的子目录。

外部表则在创建表时使用LOCATION指明其存储路径。

应该注意,HiveQL语法结构并不适用于外部表。从严格意义上来说,Hive是管理着这些目录和文件,但是并不具有对它们的完全控制权限。

数据分区的可以有多种形式,但是最常用使用分区来水平分散压力,将数据从物理上转移到和使用最频繁的用户更近的地方,以及实现其他目的。

JOIN语句

INNER JOIN

只有进行连接的两张表中都存在与连接标准相匹配的数据才会保留下来。

LEFT OUTER JOIN

JOIN操作符左边表中符号WHERE子句的所有记录将会被返回。JOIN操作符右边表中如果没有符号ON后面连接条件的记录时,那么从右边表指定选择的列的值将会是NULL

OUTER JOIN

会忽略分区过滤条件

RIGHT OUTER JOIN

会返回右边表所有符合WHERE语句的记录。左表中匹配不上的字段用NULL代替

FULL OUTER JOIN

返回所有表中符号WHERE语句条件的所有记录,如果任一表的指定字段没有符合条件的值的话,那么就使用NULL值

LEFT SEMI-JOIN

左半开连接会返回左边表的记录,前提是其记录对于右边表满足ON语句中的判定条件。

笛卡尔积JOIN

笛卡尔积是一种连接,表示左边表的行数乘以右边表的行数等于笛卡尔积结果集的大小。

MAP-SIDE JOIN

如果所有表中只有一个张表是小表,那么可以在最大的表通过mapper的时候,将小表完全放到内存中,Hive可以在map端执行连接过程,可以和内存中的小表进行逐一匹配,从而省略掉常规链接操作需要的reduce过程。

以上是关于Hive 基础的主要内容,如果未能解决你的问题,请参考以下文章

python基础学习笔记——Python基础教程(第2版 修订版)第一章

python基础学习笔记——Python基础教程(第2版 修订版)第四章(字典)

python基础教程修订版2 第四章问题求问

python基础学习笔记——Python基础教程(第2版 修订版)第十章(充电时刻)

python基础学习笔记——Python基础教程(第2版 修订版)第三章(字符串)

python基础学习笔记——Python基础教程(第2版 修订版)第11章(文件与素材)