大数据入门基础系列之浅谈Hive的数据存储和元数据存储

Hive的数据存储

从表(Table)、外部表(External Table)、分区(Partition)和桶(Bucket)。

(1)Hive数据库

类似传统数据库的DataBase,在第三方数据库里实际是一张表。

简单示例命令行 hive > create database test_database;

(2)内部表

Hive的内部表与数据库中的Table在概念上是类似。每一个Table在Hive中都有一个相应的目录存储数据。例如一个表pvs,它在HDFS中的路径为/wh/pvs,其中wh是在hive-site.xml中由$ 指定的数据仓库的目录,所有的Table数据(不包括External Table)都保存在这个目录中。删除表时,元数据与数据都会被删除。

内部表简单示例:

创建数据文件:test_inner_table.txt

创建表:create table test_inner_table (key string)

加载数据:LOAD DATA LOCAL INPATH ‘filepath’ INTO TABLE test_inner_table

查看数据:select * from test_inner_table; select count(*) from test_inner_table

删除表:drop table test_inner_table

(3)外部表

外部表指向已经在HDFS中存在的数据,可以创建Partition。它和内部表在元数据的组织上是相同的,而实际数据的存储则有较大的差异。内部表的创建过程和数据加载过程这两个过程可以分别独立完成,也可以在同一个语句中完成,在加载数据的过程中,实际数据会被移动到数据仓库目录中;之后对数据对访问将会直接在数据仓库目录中完成。删除表时,表中的数据和元数据将会被同时删除。而外部表只有一个过程,加载数据和创建表同时完成(CREATE EXTERNAL TABLE ……LOCATION),实际数据是存储在LOCATION后面指定的 HDFS 路径中,并不会移动到数据仓库目录中。当删除一个External Table时,仅删除该链接。

外部表简单示例:

创建数据文件:test_external_table.txt

创建表:create external table test_external_table (key string)

加载数据:LOAD DATA INPATH ‘filepath’ INTO TABLE test_inner_table

查看数据:select * from test_external_table; •select count(*) from test_external_table

删除表:drop table test_external_table

(4)分区

Partition对应于数据库中的Partition列的密集索引,但是Hive中Partition的组织方式和数据库中的很不相同。在Hive中,表中的一个Partition对应于表下的一个目录,所有的Partition的数据都存储在对应的目录中。

例如pvs表中包含ds和city两个Partition,则对应于ds = 20090801, ctry = US 的HDFS子目录为/wh/pvs/ds=20090801/ctry=US;对应于 ds = 20090801, ctry = CA 的HDFS子目录为/wh/pvs/ds=20090801/ctry=CA。

分区表简单示例:

创建数据文件:test_partition_table.txt

创建表:create table test_partition_table (key string) partitioned by (dt string)

加载数据:LOAD DATA INPATH ‘filepath’ INTO TABLE test_partition_table partition (dt=‘2006’)

查看数据:select * from test_partition_table; select count(*) from test_partition_table

删除表:drop table test_partition_table

(5)桶

Buckets是将表的列通过Hash算法进一步分解成不同的文件存储。它对指定列计算hash,根据hash值切分数据,目的是为了并行,每一个Bucket对应一个文件。

例如将user列分散至32个bucket,首先对user列的值计算hash,对应hash值为0的HDFS目录为/wh/pvs/ds=20090801/ctry=US/part-00000;hash值为20的HDFS目录为/wh/pvs/ds=20090801/ctry=US/part-00020。如果想应用很多的Map任务这样是不错的选择。

(6)Hive的视图

视图与传统数据库的视图类似。视图是只读的,它基于的基本表,如果改变,数据增加不会影响视图的呈现;如果删除,会出现问题。•如果不指定视图的列,会根据select语句后的生成。

示例:create view test_view as select * from test

更详细,请见

Hive 文件格式 & Hive操作(外部表、内部表、区、桶、视图、索引、join用法、内置操作符与函数、复合类型、用户自定义函数UDF、查询优化和权限控制)(非常好)

http://www.cnblogs.com/zlslch/p/5660205.html

Hive的元数据存储

Single User Mode

Multi User Mode

Remote Server Mode

详情,见

后续,我会详细分别剖析Hive的数据模型各个细分知识。

http://www.cnblogs.com/zlslch/http://www.cnblogs.com/lchzls/

http://www.cnblogs.com/sunnyDream/

本文来自企鹅号 - 好记性不如烂笔头干货媒体

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏信安之路

webgoat-Injection

注入攻击是WEB安全领域中一种最为常见的攻击方式。在“跨站脚本攻击”一章中曾经提到过,XSS本质上也是一种针对HTML的注入攻击。而在“我的安全世界观”一章中,...

900
来自专栏Spark学习技巧

Java面试中常问的数据库方面问题

B+树是一个平衡的多叉树,从根节点到每个叶子节点的高度差值不超过1,而且同层级的节点间有指针相互链接,是有序的

1302
来自专栏java架构师

SQL 写入调优

今天看到一篇非常适合本人这种数据库调优小白级别的人学的文章,做个笔记,学习之。 首先建一个用户表: CREATE TABLE [dbo].[jk_users](...

2836
来自专栏Linyb极客之路

Java面试中常问的数据库方面问题

B+树是一个平衡的多叉树,从根节点到每个叶子节点的高度差值不超过1,而且同层级的节点间有指针相互链接,是有序的

1253
来自专栏AILearning

Apache Zeppelin 中 Cassandra CQL 解释器

Name Class Description %cassandra CassandraInterpreter 为Apac...

3079
来自专栏互联网杂技

SQL注入攻防入门详解

毕业开始从事winfrm到今年转到 web ,在码农届已经足足混了快接近3年了,但是对安全方面的知识依旧薄弱,事实上是没机会接触相关开发……必须的各种借口。这几...

58610
来自专栏Java编程技术

MySQL中流式查询使用

MySQL 是目前使用比较广泛的关系型数据库,而从数据库里面根据条件查询数据到内存的情况想必大家在日常项目实践中都有使用。

1422
来自专栏Hadoop实操

0464-如何离线分析HDFS的FsImage查找集群小文件

随着Hadoop集群数据量的增长,集群中也同时会存在大量的小文件,即文件Size比HDFS的Block Size(默认128MB)小的多的文件。Hadoop集群...

3345
来自专栏乐沙弥的世界

RMAN 提示符下执行SQL语句

       在手动恢复数据库时,有时候需要在SQL*Plus提示符以及操作系统提示符,RMAN提示符下来回切换显得有些繁琐。实际上RMAN为我们提供了命令行下...

1193
来自专栏SpringBoot 核心技术

第六章:使用QueryDSL的聚合函数

3102

扫码关注云+社区

领取腾讯云代金券