热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

分区表与分桶表

分区表:在大数据中,最常用的一种思想就是分治,我们可以把大的文件切割划分成一个个的小的文件,这样每次操作一个小的文件就会很容易了,同样的道理,在hive当中也是支持这种思想的,就是
分区表:

在大数据中,最常用的一种思想就是分治,我们可以把大的文件切割划分成一个个的小的文件,这样每次操作一个小的文件就会很容易了,同样的道理,在hive当中也是支持这种思想的,就是我们可以把大的数据,按照每天,或者每小时进行切分成一个个的小的文件,这样去操作小的文件就会容易得多了

分区字段是一个虚拟的字段  不存放任何数据,分区表字段不能够在表中已经存在。

分区字段的数据来自于装载分区表数据的时候指定的

分区表的字段在hdfs上的效果就是在建立表的文件夹下面又创建了子文件,这样的目的把数据的划分更加细致 减少了查询时候全表扫描成本 只需要按照指定的分区扫描数据并显示结果即可

<-- 创建分区表语法 -->
create table score(s_id string,c_id string, s_score int) partitioned by (month string) row format delimited fields terminated by '\t';
<-- 创建一个表带多个分区 -->
create table score2 (s_id string,c_id string, s_score int) partitioned by (year string,month string,day string) row format delimited fields terminated by '\t';
<-- 加载数据到分区表中 -->
load data local inpath '/export/servers/hivedatas/score.csv' into table score partition (mOnth='201806');
<-- 加载数据到一个多分区的表中去 -->
load data local inpath '/export/servers/hivedatas/score.csv' into table score2 partition(year='2018',mOnth='06',day='01');
<-- 多分区联合查询使用union  all来实现 -->
select * from score where mOnth= '201806' union all select * from score where mOnth= '201806';
<-- 查看分区 -->
show  partitions  score;
<-- 添加一个分区 -->
alter table score add partition(mOnth='201805');
<-- 同时添加多个分区 -->
alter table score add partition(mOnth='201804') partition(mOnth= '201803');
<-- 注意:添加分区之后就可以在hdfs文件系统当中看到表下面多了一个文件夹 -->
<-- 删除分区 -->
alter table score drop partition(mOnth= '201806');

 

分桶表

将数据按照指定的字段进行分成多个桶中去,说白了就是将数据按照字段进行划分,可以将数据按照字段划分到多个文件当中去

分桶表(分簇表)创建之前需要开启分桶功能,分桶表创建的时候分桶字段必须是表中已经存储的字段,也就是说你要按照表中那个字段进行分桶

针对分桶表的数据导入:load data方式不能够导成分桶表的数据,没有分桶效果,原因在于load 本质是哪个相当于 hive 去帮我们执行hadoop fs -put 

分桶表的数据采用insert+select 插入的数据来自于查询结果(查询时候执行了mr程序)对应mr当中的partitioner

默认分桶负责  按照你指定的分桶字段clustered by 哈希值与分桶的个数 set mapreduce.job.reduces 进行模运算取余

分桶表也是把表所映射的结构化数据文件分成更细致的部分 但是更多的是用在join 查询提高效率之上

只需要把join 的字段在各自表当中进行分桶操作即可

<-- 开启hive的桶表功能 -->
set hive.enforce.bucketing=true;
<-- 设置reduce的个数 -->
set mapreduce.job.reduces=3;
<-- 创建桶表 -->
create table course (c_id string,c_name string,t_id string) clustered by(c_id) into 3 buckets row format delimited fields terminated by '\t';
<-- 桶表的数据加载,只能通过insert  overwrite。hdfs  dfs  -put文件或者通过load  data无法加载
创建普通表,并通过insert  overwrite的方式将普通表的数据通过查询的方式加载到桶表当中去 -->
<-- 创建普通表: -->
create table course_common (c_id string,c_name string,t_id string) row format delimited fields terminated by '\t';
<-- 普通表中加载数据 -->
load data local inpath '/export/servers/hivedatas/course.csv' into table course_common;
<-- 通过insert  overwrite给桶表中加载数据 -->
insert overwrite table course select * from course_common cluster by(c_id);
分区表和分桶表的优点,字段的要求

分区表:    优点是:提高查询效率      要求是:分区字段绝对不能出现在表已有的字段内。

分桶表:    优点是:提高join效率和用于数据取样。    要求是:分桶字段必须出现在表已有的字段内。

 


推荐阅读
  • 如何用JNI技术调用Java接口以及提高Java性能的详解
    本文介绍了如何使用JNI技术调用Java接口,并详细解析了如何通过JNI技术提高Java的性能。同时还讨论了JNI调用Java的private方法、Java开发中使用JNI技术的情况以及使用Java的JNI技术调用C++时的运行效率问题。文章还介绍了JNIEnv类型的使用方法,包括创建Java对象、调用Java对象的方法、获取Java对象的属性等操作。 ... [详细]
  • 本文详细介绍了GetModuleFileName函数的用法,该函数可以用于获取当前模块所在的路径,方便进行文件操作和读取配置信息。文章通过示例代码和详细的解释,帮助读者理解和使用该函数。同时,还提供了相关的API函数声明和说明。 ... [详细]
  • 一、Hadoop来历Hadoop的思想来源于Google在做搜索引擎的时候出现一个很大的问题就是这么多网页我如何才能以最快的速度来搜索到,由于这个问题Google发明 ... [详细]
  • 《数据结构》学习笔记3——串匹配算法性能评估
    本文主要讨论串匹配算法的性能评估,包括模式匹配、字符种类数量、算法复杂度等内容。通过借助C++中的头文件和库,可以实现对串的匹配操作。其中蛮力算法的复杂度为O(m*n),通过随机取出长度为m的子串作为模式P,在文本T中进行匹配,统计平均复杂度。对于成功和失败的匹配分别进行测试,分析其平均复杂度。详情请参考相关学习资源。 ... [详细]
  • HDFS2.x新特性
    一、集群间数据拷贝scp实现两个远程主机之间的文件复制scp-rhello.txtroothadoop103:useratguiguhello.txt推pushscp-rr ... [详细]
  • PHP反射API的功能和用途详解
    本文详细介绍了PHP反射API的功能和用途,包括动态获取信息和调用对象方法的功能,以及自动加载插件、生成文档、扩充PHP语言等用途。通过反射API,可以获取类的元数据,创建类的实例,调用方法,传递参数,动态调用类的静态方法等。PHP反射API是一种内建的OOP技术扩展,通过使用Reflection、ReflectionClass和ReflectionMethod等类,可以帮助我们分析其他类、接口、方法、属性和扩展。 ... [详细]
  • 本文介绍了在Go语言中可见性与scope的规则,包括在函数内外声明的可见性、命名规范和命名风格,以及变量声明和短变量声明的语法。同时,还介绍了变量的生命周期,包括包级别变量和局部变量的生命周期,以及变量在堆和栈上分配的规则和逃逸分析的概念。 ... [详细]
  • 前段时间做一个项目,需求是对每个视频添加预览图,这个问题最终选择方案是:用canvas.toDataYRL();来做转换获取视频的一个截图,添加到页面中,达到自动添加预览图的目的。 ... [详细]
  • 本文介绍了一种求解最小权匹配问题的方法,使用了拆点和KM算法。通过将机器拆成多个点,表示加工的顺序,然后使用KM算法求解最小权匹配,得到最优解。文章给出了具体的代码实现,并提供了一篇题解作为参考。 ... [详细]
  • 什么是大数据lambda架构
    一、什么是Lambda架构Lambda架构由Storm的作者[NathanMarz]提出,根据维基百科的定义,Lambda架构的设计是为了在处理大规模数 ... [详细]
  • Hadoop 源码学习笔记(4)Hdfs 数据读写流程分析
    Hdfs的数据模型在对读写流程进行分析之前,我们需要先对Hdfs的数据模型有一个简单的认知。数据模型如上图所示,在NameNode中有一个唯一的FSDirectory类负责维护文件 ... [详细]
  • Flink使用java实现读取csv文件简单实例首先我们来看官方文档中给出的几种方法:首先我们来看官方文档中给出的几种方法:第一种:Da ... [详细]
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
  • sklearn数据集库中的常用数据集类型介绍
    本文介绍了sklearn数据集库中常用的数据集类型,包括玩具数据集和样本生成器。其中详细介绍了波士顿房价数据集,包含了波士顿506处房屋的13种不同特征以及房屋价格,适用于回归任务。 ... [详细]
  • 对于开源的东东,尤其是刚出来不久,我认为最好的学习方式就是能够看源代码和doc,測试它的样例为了方便查看源代码,关联导入源代 ... [详细]
author-avatar
mobiledu2502876597
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有