`
x10232
  • 浏览: 55565 次
  • 来自: 北京
社区版块
存档分类
最新评论

hive学习—分区、分桶和索引

阅读更多

hive引入partition和bucket的概念,中文翻译分别为分区和桶(我觉的不是很合适,但是网上基本都是这么翻译,暂时用这个吧),这两个概念都是把数据划分成块,分区是粗粒度的划分桶是细粒度的划分,这样做为了可以让查询发生在小范围的数据上以提高效率。
分区的作用:使用分区可以加快数据分片的查询速度。
桶的作用:(1)获得更高效的查询处理效率,桶为表加上了额外的结构。
          (2)"取样"更高效。在处理大规模数据集时,在开发和修改查询阶段,如果能在数据集的一小部分数据上试进行查询,会带来很多方便。
 
首先介绍分区的概念,还是先来个例子看下如果创建分区表:
create table logs_partition(ts bigint,line string) --ts timestamp line 每一行日志
partitioned by (dt string,country string) -- 分区列 dt 日志产生日期

创建分区表需要在定义表的时候声明分区列,这个分区列是个比较有意思的东西下面来看看,向表中导入数据:
load data local inpath 'input/hive/partitions/file1'
into table logs_partition
partition(dt='2001-01-01',country='GB');

.......
-- 看下表的结构
hive> desc logs_partition;
OK
ts                      bigint                  None                
line                    string                  None                
dt                      string                  None                
country                 string                  None                
          
# Partition Information      
# col_name              data_type               comment             
          
dt                      string                  None                
country                 string                  None                
Time taken: 0.265 seconds, Fetched: 10 row(s)


查看一个表的所有分区
hive> show partitions logs_partition;
OK
dt=2001-01-01/country=GB
dt=2001-01-01/country=US
dt=2001-01-02/country=GB
dt=2001-01-02/country=US
Time taken: 0.186 seconds, Fetched: 4 row(s)


导入完数据后看下hive数据仓库表logs_partition下的文件目录结构
/user/hive/warehouse/logs_partition
Screenshot from 2013-10-10 17:46:25
看到了吧分区列都成了目录了,这样查询的时候就会定位到某个目录下而大大提高了查询效率,在查看表结构的时候分区列跟其他列并无区别,看个查询语句:
SELECT ts, dt, line
FROM logs
WHERE country='GB';
 
1   2001-01-01  Log line 1
2   2001-01-01  Log line 2
4   2001-01-02  Log line 4
Time taken: 36.316 seconds, Fetched: 3 row(s)


这个查询只会查询file1, file2, file4这三个文件还有一个有趣的问题就是,查看下数据文件fieldX
里面都只包含两列ts和line并不包含dt和country这两个分区列,但是从查询结果看分区列和非分区列并无差别,实际上分区列都是从数据仓库的分区目录名得来的。

接下来说说桶,桶是更为细粒度的数据范围划分,它能使一些特定的查询效率更高,比如对于具有相同的桶划分并且jion的列刚好就是在桶里的连接查询,还有就是示例数据,对于一个庞大的数据集我们经常需要拿出来一小部分作为样例,然后在样例上验证我们的查询,优化我们的程序。

下面看看如何创建带桶的表
create table bucket_user (id int,name string)
clustered by (id) into 4 buckets;


关键字clustered声明划分桶的列和桶的个数,这里以用户的id来划分桶,划分4个桶。
以下为了简便划分桶的列简称为桶列
hive会计算桶列的hash值再以桶的个数取模来计算某条记录属于那个桶

向这种带桶的表里面导入数据有两种方式,一种是外部生成的数据导入到桶表,一种是利用hive来帮助你生成桶表数据
由于hive在load数据的时候不能检查数据文件的格式与桶的定义是否匹配,如果不匹配在查询的时候就会报错,所以最好还是让hive来帮你生成数据,简单来说就是利用现有的表的数据导入到新定义的带有桶的表中,下面来看看:
已经存在的表:
hive> select * from users;
OK
0   Nat
2   Joe
3   Kay
4   Ann


hive> set hive.enforce.bucketing=true  --必须设置这个数据,hive才会按照你设置的桶的个数去生成数据

下面把user的数据导入到bucketed_users中

insert overwrite table bucketed-users
select * from users;


然后见证奇迹的时刻:
hive> dfs -ls /user/hive/warehouse/bucketed_users;
-rw-r--r--   1 root supergroup         12 2013-10-10 18:48 /user/hive/warehouse/bucketed_users/000000_0
-rw-r--r--   1 root supergroup          0 2013-10-10 18:48 /user/hive/warehouse/bucketed_users/000001_0
-rw-r--r--   1 root supergroup          6 2013-10-10 18:48 /user/hive/warehouse/bucketed_users/000002_0
-rw-r--r--   1 root supergroup          6 2013-10-10 18:48 /user/hive/warehouse/bucketed_users/000003_0


hive> dfs -cat /user/hive/warehouse/bucketed_users/000000_0;     
0Nat
4Ann

下面来看看利用bucket来对示例数据进行查询
---带桶的表
select * from bucketed_users
tablesample(bucket 1 out of 4 on id);

---不带桶的表
select * from users
tablesample(bucket 1 out of 4 on rand());

tablesample的作用就是让查询发生在一部分桶上而不是整个数据集上,上面就是查询4个桶里面第一个桶的数据
相对与不带桶的表这无疑是效率很高的,因为同样都是需要一小部分数据,但是不带桶的表需要使用rand()函数,需要在整个数据集上检索。
分享到:
评论

相关推荐

    Hive的分区表

    Hive分区表对应的是HDFS上独立的文件夹,该文件夹存放的是该分区的所有数据,其实分区就是分目录。Hive通过分区把一个大的数据集根据业务需要分割成小的数据集,在查询时能够通过where关键词选择指定分区,从而提高...

    第6章:Hive性能优化及Hive3新特性1

    第6章:Hive性能优化及Hive3新特性课程学习目标掌握Hive中分区表及分桶表的设计及优化实现了解Hive中索引的设计及应用场景掌握Hive中文件格式与数据

    hive2.1.1中orc格式读取报数组越界错误解决方法

    hive2.1.1orc格式读取报数组越界错误,替换jar包。hive-exec-2.1.1-cdh6.3.2.jar、hive-orc-2.1.1-cdh6.3.2.jar。分发各个服务器即可。

    大数据学习路线 大数据技术栈思维导图 大数据常用软件安装指南

    大数据学习路线 大数据技术栈思维导图 大数据常用软件安装...Hive 分区表和分桶表 Hive 视图和索引 Hive 常用 DML 操作 Hive 数据查询详解 Spark、Storm、Flink、HBase、Kafka、Zookeeper、Flume、Sqoop等技术的学习

    Hive用户指南(Hive_user_guide)_中文版.pdf

    表的列和分区及其属性,表的属性(是否为外部表等),表的数据所在目录等。 3、 解释器、编译器、优化器完成 HQL 查询语句从词法分析、语法分析、编译、优化以及 查询计划的生成。生成的查询计划存储在 HDFS 中,...

    非常好的大数据入门目资源,分享出来.zip

    Hive 分区表和分桶表 Hive 视图和索引 Hive 常用 DML 操作 Hive 数据查询详解 三、Spark Spark Core : Spark 简介 Spark 开发环境搭建 弹性式数据集 RDD RDD 常用算子详解 Spark 运行模式与作业提交 Spark 累加器与...

    大数据底层原理和基础概念面试题30道

    15、Hive中的数据分区和分桶对查询性能有哪些影响? 16、Hadoop中的YARN是什么?它和MapReduce有什么关系? 17、YARN中的资源分配分为哪几种类型?它们分别适用于哪些场景? 18、YARN中的ResourceManager和...

    Hadoop+Hive+Spark+Kafka+Zookeeper+Flume+Sqoop+Azkaban+Scala

    分区表和分桶表 视图和索引 常用 DML 操作 数据查询详解 三、Spark Spark Core Spark SQL Spark Streaming 五、Flink 核心概念综述 开发环境搭建 Data Source Data Transformation Data Sink 窗口模型 状态管理与...

    hive仓库元数据管理系统

    1.hive元数据信息的查看,包括表基本信息,数据库基本信息,字段信息,分区信息,索引信息等; 2.对hive元数据的检索,包括表、字段、数据库等内容的检索 3.元数据信息更新(目前只提供对库、表、字段的描述信息进行...

    大数据精选入门指南,包括大数据学习路线、大数据技术栈思维导图

    Hive 分区表和分区表 Hive 视图和索引 Hive 使用 DML 操作 Hive数据详细查询解 三、火花 火花核心: 斯帕克简介 Spark开发环境搭建 弹性式数据集 RDD RDD使用算子详解 Spark运行模式与作业提交 Spark 累加器与广播...

    hiveMetaMgr:hive仓库元数据管理系统

    #hive仓库元数据管理系统##有如下功能: 1.hive元数据信息的查看,包括表基本信息,数据库基本信息,分区信息,分区信息,索引信息等; 2.对hive元数据的检索,包括表,分段,数据库等内容的检索3.元数据信息更新...

    大数据学习笔记

    第四部分HIVE学习 70 第19章 HIVE介绍 71 19.1 HIVE是什么? 71 19.2 HIVE特点 71 19.3 HIVE架构 71 19.5 HIVE工作流 72 第20章 HIVE 安装 74 20.1 Hadoop安装 74 20.2 HIVE安装 77 20.3 Derby安装与设置 78 第21章 ...

    大数据之运维.pptx

    大数据运维 郭现伟 大数据之运维全文共12页,当前为第1页。...Hive 中的元数据包括表的名字,表的列和分区及其属性,表的属性(是否为外部表等),表的数据所在目录等。 解释器、编译器、优化器、执行器 解释器、编译

    ES-Fastloader:利用Hadoop容错性和并行性快速构建大规模ElasticSearch索引

    加载程序将创建一个Hadoop作业,以从HDFS中的数据文件中读取数据,在每个节点的基础上对其进行分区,最后将生成的索引写入ES分片。 在DiDi中,我们一直在使用ES-Fastloader从Hive中的TB / PB级别序列文件创建大规模...

    Hadoop权威指南(中文版)2015上传.rar

    1.6.2 分区(Partitions)和桶(Buckets) 1.6.3 存储格式 1.6.4 导入数据 1.6.5 表的修改 1.6.6 表的丢弃 1.7 查询数据 1.7.1 排序(Sorting)和聚集(Aggregating) 1.7.2 MapReduce脚本 1.7.3 连接 1.7.4 子查询 ...

    Hadoop实战(第2版)

    10.2.1 序列化和反序列化技术点64 载入日志文件10.2.2 UDF、分区、分桶和压缩技术点65 编写UDF 和压缩分区表10.2.3 数据合并技术点66 优化Hive 合并10.2.4 分组、排序和explain 10.3 本章小结11 ...

    Hadoop硬实战 [(美)霍姆斯著][电子工业出版社][2015.01]_PDF电子书下载 带书签目录 高清完整版.rar )

    10.2.2 UDF、分区、分桶和压缩 技术点65 编写UDF 和压缩分区表 10.2.3 数据合并 技术点66 优化Hive 合并 10.2.4 分组、排序和explain 10.3 本章小结 11 Pig 流管道 11.1 Pig 基础 11.1.1 安装 ...

    Hadoop权威指南 第二版(中文版)

     1.6.2 分区(Partitions)和桶(Buckets)  1.6.3 存储格式  1.6.4 导入数据  1.6.5 表的修改  1.6.6 表的丢弃  1.7 查询数据  1.7.1 排序(Sorting)和聚集(Aggregating)  1.7.2 MapReduce脚本  1.7.3 连接  ...

    nosql 入门教程

    8.3.2 创建唯一索引和稀疏索引 138 8.3.3 基于关键字的搜索和多重键 139 8.4 CouchDB的索引与排序 140 8.5 Apache Cassandra的索引与排序 141 8.6 小结 143 第9章 事务和数据完整性的管理 144 9.1 RDBMS和ACID...

    大数据学习笔记.pdf

    第一部分 Spark学习 ....................................................................................................................... 6 第1章 Spark介绍 ..............................................

Global site tag (gtag.js) - Google Analytics