热门标签 | 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效率和用于数据取样。    要求是:分桶字段必须出现在表已有的字段内。

 


推荐阅读
  • 本文介绍了如何使用Flume从Linux文件系统收集日志并存储到HDFS,然后通过MapReduce清洗数据,使用Hive进行数据分析,并最终通过Sqoop将结果导出到MySQL数据库。 ... [详细]
  • 技术日志:深入探讨Spark Streaming与Spark SQL的融合应用
    技术日志:深入探讨Spark Streaming与Spark SQL的融合应用 ... [详细]
  • 本文介绍了如何使用Hive分析用户最长连续登录天数的方法。首先对数据进行排序,然后计算相邻日期之间的差值,接着按用户ID分组并累加连续登录天数,最后求出每个用户的最大连续登录天数。此外,还探讨了该方法在其他领域的应用,如股票市场中最大连续涨停天数的分析。 ... [详细]
  • sh cca175problem03evolveavroschema.sh ... [详细]
  • 本文介绍了在sqoop1.4.*版本中,如何实现自定义分隔符的方法及步骤。通过修改sqoop生成的java文件,并重新编译,可以满足实际开发中对分隔符的需求。具体步骤包括修改java文件中的一行代码,重新编译所需的hadoop包等。详细步骤和编译方法在本文中都有详细说明。 ... [详细]
  • 在使用 Cacti 进行监控时,发现已运行的转码机未产生流量,导致 Cacti 监控界面显示该转码机处于宕机状态。进一步检查 Cacti 日志,发现数据库中存在 SQL 查询失败的问题,错误代码为 145。此问题可能是由于数据库表损坏或索引失效所致,建议对相关表进行修复操作以恢复监控功能。 ... [详细]
  • 本文详细介绍了在 Oracle 数据库中使用 MyBatis 实现增删改查操作的方法。针对查询操作,文章解释了如何通过创建字段映射来处理数据库字段风格与 Java 对象之间的差异,确保查询结果能够正确映射到持久层对象。此外,还探讨了插入、更新和删除操作的具体实现及其最佳实践,帮助开发者高效地管理和操作 Oracle 数据库中的数据。 ... [详细]
  • 2012年9月12日优酷土豆校园招聘笔试题目解析与备考指南
    2012年9月12日,优酷土豆校园招聘笔试题目解析与备考指南。在选择题部分,有一道题目涉及中国人的血型分布情况,具体为A型30%、B型20%、O型40%、AB型10%。若需确保在随机选取的样本中,至少有一人为B型血的概率不低于90%,则需要选取的最少人数是多少?该问题不仅考察了概率统计的基本知识,还要求考生具备一定的逻辑推理能力。 ... [详细]
  • 如何高效启动大数据应用之旅?
    在前一篇文章中,我探讨了大数据的定义及其与数据挖掘的区别。本文将重点介绍如何高效启动大数据应用项目,涵盖关键步骤和最佳实践,帮助读者快速踏上大数据之旅。 ... [详细]
  • MySQL 8.0 中的二进制日志格式详细解析及其官方文档参考。本文介绍了MySQL服务器如何使用不同的日志记录格式来记录二进制日志,包括早期版本中基于SQL语句的复制机制(即基于语句的日志记录)。此外,还探讨了其他日志记录方式,如基于行的日志记录和混合日志记录模式,并提供了配置和管理这些日志格式的最佳实践。 ... [详细]
  • Phoenix 使用体验分享与深度解析
    闲来无事看了下hbase方面的东西,发现还好理解不过不大习惯于是找到个phoenix感觉不错性能指标如下好像还不错了准备工作:启动hadoop集群启动zookkeeper启动hba ... [详细]
  • MapReduce统计每个用户的使用总流量
    1、原始数据2、使用java程序1)新建项目2)导包  hadoop-2.7.3\share\hadoop\mapreducehsfs的那些包commo ... [详细]
  •     这里使用自己编译的hadoop-2.7.0版本部署在windows上,记得几年前,部署hadoop需要借助于cygwin,还需要开启ssh服务,最近发现,原来不需要借助cy ... [详细]
  • 什么是大数据lambda架构
    一、什么是Lambda架构Lambda架构由Storm的作者[NathanMarz]提出,根据维基百科的定义,Lambda架构的设计是为了在处理大规模数 ... [详细]
  • Hadoop源码解析1Hadoop工程包架构解析
    1 Hadoop中各工程包依赖简述   Google的核心竞争技术是它的计算平台。Google的大牛们用了下面5篇文章,介绍了它们的计算设施。   GoogleCluster:ht ... [详细]
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社区 版权所有