Hive数据仓库(三)----基础知识

前面讲了一些数据仓库的安装和DDL的基本使用以及hive的简单架构,只要你熟悉基本的sql,就能够进行基本的hive数据分析。

当然,我们还是得区分一般传统数据库和hive,毕竟sql不能完全适用hive,一些基础知识还是要掌握的。


内部表和外部表


我们常用的表一般就是内部表(inner),它时hive默认创建的表,它的元数据存储在了数据库里面,实际的数据以某种格式存储在了hdfs,这里的某种格式等下会说。

但是外部表就不同了,它的由来主要时想某一个表可以共享数据使用,而且它的实际数据不是存储在hdfs的hive默认存储目录,而是在创建表时自己定义的目录。 

还有要记住的就是在删除表时,一定要知道删除内部表时元数据和hdfs的实际数据都被删除了,而外部表知识将元数据删除,实际的数据仍然在hdfs上。

而在做数据迁移的时候,一般迁移就是类似于剪切的操作,然后改变一下元数据的映射关系。


分区表和分桶表


分区表

这个东东也很常见,当数据量很大时,我们可能会通过分区的方式,可以让数据查询更加方便,性能提高。

create table table1(
id int,
name string)
row format delimited
fields terminited by ','
partitioned by (data string,hour string);

比如创建上面这个分区表,我们针对数据的特点,根据日期,小时进行分区,这里官方在某种程度上可能把日期也当作这个分区表的字段,但是不是实际表的字段,实际字段还是自己创建的,只不过在查询的时候被用来分区的字段可以当作字段来使用。而且分区字段在hdfs上面是以目录形式层层递进的,而不是在一个文件中以字段形式表现。

比如

这里再table1表下面会有data目录,data目录下面又有hour目录,然后才是对应的data和hour分区的表信息。

分桶表

分桶表在分区表上更细粒度,它时基于对文件的管理,我们刚才看分区表是基于字段的文件夹,只要新建一个分区就有一个文件夹,那么对于分桶,就是对一个文件里面的数据进行hash,当然是根据某一个字段进行hash,如果是int就对桶的个数取模,如果是string,就是对字段进行hash,分成桶的个数,每个桶对应一个hdfs的文件,也就是一个reduce,后续进行reduce操作,都是直接对每个文件进行reduce。

先创建一个中间表
create table test(uid int,name string,age int) row format delimited fields terminated by ',';
将数据导入到这个中间表里面
load data local inpath '/home/hadoop/t1' into table test;
创建分桶表:
create table bucket(
id int,
name string,
age int)
clustered by (id) sorted by (age) row format delimited fields terminated by ',';

然后将中间表test的内容插入到分桶表里面
from test
insert into table bucket
select *;

对应的三个分桶就有了三个文件,文件里面是根据id取模分桶的。

需要注意的是,如果是2.x的hive版本倒是没什么问题,如果是1.x就有问题了,导入的表可能还是要给分桶,原因是需要设置参数set hive.enforce.bucketing = true;强制使用分桶。

我们可以看一下数据

39-6为一个桶,58-1为一个桶,2-8为一个桶。

我们来对分桶的数据进行抽样,使用的是tablesample

注意tablesample(x out of y )

x:是要看第几个桶

y:是取桶/y的数据。比如有4个桶,y是8,那么就取一般的数据。


hive表在hdfs存储格式


TEXTFILE格式

这是hive默认的存储格式,除非在配置文件中配置hive.default.fileformat配置默认的其他格式,就可以了。
TEXTFILE也是利用分隔符来读取分隔符文件的。

SEQUENCEFILE

以序列化的方式存储
它是hadoop API提供的一种二进制文件支持,比较方便,可分割,可压缩
有NONE,RECORD,BLOCK三种压缩选择。一般使用BLOCK

RCFILE

一种以行列存储结合的存储方式

Parquet

一种行式存储,同时具有很好的压缩性能;可以减少大量的表扫描和反序列化时间。

ORCFile

数据按照行分块,每个块按照列存储,其中每个块都存储有一个索引。hive给出的新格式,属于RCFILE的升级版,性能有大幅度提升,而且数据可以压缩存储,压缩快 快速列存取。 
支持ACID事务,和优化。
发布了66 篇原创文章 · 获赞 31 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/weixin_43272605/article/details/100668123