Hive表的分区与分桶

2023-11-03

1.Hive分区表

Hive使用select语句进行查询的时候一般会扫描整个表内容,会消耗很多时间做没必要的工作。Hive可以在创建表的时候指定分区空间,这样在做查询的时候就可以很好的提高查询的效率。


创建分区表的语法:

create table tablename(
       name string
)partitioned by(key,type...);

示例

drop table if exists employees;
create table  if not exists employees(
       name string,
       salary float,
       subordinate array<string>,
       deductions map<string,float>,
       address struct<street:string,city:string,num:int>
) partitioned by (date_time string,type string)
row format delimited fields terminated by '\t'
collection items terminated by ','
map keys terminated by ':'
lines terminated by '\n'
stored as textfile
location '/hive/inner';
附:上述语句表示在建表时划分了date_time和type两个分区也叫双分区,一个分区的话就叫单分区,上述语句执行完以后我们查看表的结果会发现多了分区的两个字段。

desc employees;
结果如下:

注:在文件系统中的表现为date_time为一个文件夹,type为date_time的子文件夹。



向分区表中插入数据(要指定分区)

hive> load data local inpath '/usr/local/src/employee_data' into table employees partition(date_time='2015-01_24',type='userInfo');
Copying data from file:/usr/local/src/employee_data
Copying file: file:/usr/local/src/employee_data
Loading data to table default.employees partition (date_time=2015-01_24, type=userInfo)
OK
Time taken: 0.22 seconds
hive> 

数据插入后在文件系统中显示为:

注:从上图中我们就可以发现type分区是作为子文件夹的形式存在的。


添加分区:

alter table employees add if not exists partition(date_time='2088-08-18',type='liaozhongmin');
注:我们可以先添加分区,再向对应的分区中添加数据。

查看分区:

show partitions employees;
附:employees在这里表示表名。

删除不想要的分区

alter table employees drop if exists partition(date_time='2015-01_24',type='userInfo');

再次查看分区:


2.Hive桶表

对于每一个表或者是分区,Hive可以进一步组织成桶,也就是说桶是更为细粒度的数据范围划分。Hive是针对某一列进行分桶。Hive采用对列值哈希,然后除以桶的个数求余的方式决定该条记录存放在哪个桶中。分桶的好处是可以获得更高的查询处理效率。使取样更高效。

示例:

create table bucketed_user(
  id int,
  name string
)
clustered by(id) sorted by(name) into 4 buckets
row format delimited fields terminated by '\t'
stored as textfile;
我们使用用户id来确定如何划分桶(Hive使用对值进行哈希并将结果除于桶的个数取余数的方式进行分桶)



另外一个要注意的问题是使用桶表的时候我们要开启桶表:

set hive.enforce.bucketing = true;

现在我们将表employees中name和salary查询出来再插入到这张表中:

insert overwrite table bucketed_user select salary,name from employees;

我们通过查询语句可以查看插进来的数据:

数据在文件中的表现形式如下,分成了四个桶:


当从桶表中进行查询时,hive会根据分桶的字段进行计算分析出数据存放的桶中,然后直接到对应的桶中去取数据,这样做就很好的提高了效率。



本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Hive表的分区与分桶 的相关文章

随机推荐

  • [算法整理]可能是最全的无监督/自监督单目深度估计方法汇总 - Part2:双目图像篇

    算法整理 可能是最全的自监督 无监督单目深度估计方法汇总 Part2 双目图像篇 背景 借着最近开题写开题报告的机会 比较细致地整理了一下之前看过的自监督单目深度估计相关的论文 合计了一下 感觉写篇综述有点太耗时耗力 干脆就在这里分享出来好
  • python 找出list列表中相同元素(指定元素)的所有索引

    有时需要获取列表中某一元素的所有索引 而获取列表元素索引的函数index只能返回第一个满足条件的元素的索引 此时我们可以通过两种方式获取其所有索引 1 将list转为array 对于array对象 可以使用如下方式获取某个元素的所有索引 n
  • background-position的使用方法

    这是在学习了阮一峰先生的博客后写的一篇解释笔记 附上原链接 CSS中背景图片的定位方法 CSS中的背景图片定位方法有三种 1 关键字定位 background position top left 2 像素定位 background posi
  • Unity Debug的简单封装

    对Unity Debug的简单封装 使用前提 Project Settings Player Other Settings Script Define Symbols添加 EnableLog 点击Apply 测试代码 using MTool
  • visual studio:C#工程项目生成项目时,默认将资源文件复制到输出目录

    参考 vs生成项目时 默认将资源文件复制到输出目录 总结 使用情况 通常是需要外部dll 不直接拷贝到运行目录 而是放到工程项目下 两种方式 1 生成事件里编写命令行 2 添加dll到项目目录 设置文件属性 复制到输出目录
  • 分布式搜索引擎Elasticsearch基础入门学习

    Elasticsearch介绍 Elasticsearh 是 elastic co 公司开发的分布式搜索引擎 Elasticsearch 简称ES 是一个开源的分布式 高度可扩展的全文搜索和分析引擎 它能够快速 近乎实时的存储 搜索和分析大
  • uni-app使用uView

    uni app使用uView 三配置前提 先安装uview 1 使用HBuilder创建uni app项目 这步过后就可以使用npm安装第三方组件了 cmd进入当前根目录执行 npm init y 执行后项目中会生成package json
  • 游戏开发unity插件Magica Cloth:学习贴汇总(持续更新)

    插件说明 高效的布料系统 支持jobs 开源 官方下载地址 https assetstore unity com packages tools physics magica cloth 160144 unity插件初步配置 BoneSpri
  • linux下载出现:Failed to connect to raw.githubusercontent.com port 443: Connection refused

    linux下载出现 Failed to connect to raw githubusercontent com port 443 Connection refused 原因 github域名被污染 解决方式 打开网站 https www
  • 【patchwork++】——PCA主成分分析法

    降维算法 gt 保留最大有用值信息 gt 换坐标轴 找坐标系 首先 去中心化 把坐标原点放在数据中心 然后 找坐标系 找到方差最大方向 数据线性变换 拉伸 旋转 注意 离群点对PCA影响较大 参考视频 用最直观的方式告诉你 什么是主成分分析
  • 一串首尾相连的珠子(m个),有n种颜色(n<=10) 设计一种算法去除其中一段,要求包含所有的N种颜色

    继续上代码 include
  • Hadoop3.2.1版本的环境搭建

    最近有人提出能不能发一些大数据相关的知识 No problem 今天先从安装环境说起 搭建起自己的学习环境 Hadoop的三种搭建方式以及使用环境 单机版适合开发调试 伪分布式适合模拟集群学习 完全分布式适用生产环境 这篇文件介绍如何搭建完
  • java xrunjdwp_Java远程断点调式 -Xdebug

    前言 我们在开发的过程中 难免会遇到调用别人机器上的代码 或者测试服务器上的代码 再调用过程中 难免会用到断点调式的功能 但是运行的不是本地的代码怎么办呢 现在我们就来了解下Java远程断点调用 需要 本地必须有源码 才能进行远程断点 一
  • Instant-ngp Windows11安装、使用记录

    Instant NeRF Study Debug 本机配置 Y9000P RTX3060 Win11 Instant NeRF Study Debug 1 Git 2 Cmake 3 instant ngp 示例数据 自定义数据 注意事项
  • 一次composer错误使用引发的思考

    一次composer错误使用引发的思考 2019 03 05 12 19 by 轩脉刃 阅读 评论 收藏 编辑 一次composer错误使用引发的思考 这个思考源自于一个事故 让我对版本依赖重新思考了一下 事故现象 一个线上的管理后台 一个
  • LeetCode题解——42.连续子数组的最大和(动态规划思想)

    题目地址 剑指 Offer 42 连续子数组的最大和 力扣 LeetCode 一 解题思路 在这道题中 数组连续是一个很重要的信息 我们可以创建一个数组用于记录每一位对应的最大值 所谓每一位的最大值 意思就是以这一位为结尾的数组的最大值 那
  • 面试过程中会遇到的机器学习教科书中 7 大经典问题

    如果希望了解机器学习 或者已经决定投身机器学习 你会第一时间找到各种教材进行充电 同时在心中默认 书里讲的是牛人大神的毕生智慧 是正确无误的行动指南 认真学习就能获得快速提升 但实际情况是 你很可能已经在走弯路 科技发展很快 数据在指数级增
  • SQL Server 基础语法2(超详细!)

    文章目录 选择数据库school 查询所有学生的学号 姓名和年龄 查询结果列项是中文名 查询 计算机 系的所有学生的基本信息 查询所有女同学的姓名及所在的系 显示结果不允许重复出现 查询课程号不为 1 4 或 7 的课程的信息 查询课程号不
  • 处理Matlab Coder之后, Compiler can't find "tmwtypes.h"问题

    作为一个强大的科学计算软件 matlab广泛应用于较多领域 以其简单的编程风格 便利的调试环境等众多优点 在编写算法与测试的时候通常用到 然而很多的实际运用上matlab毕竟还不是很普及 相反还是c与c 更多 同时正版matlab这样一个昂
  • Hive表的分区与分桶

    1 Hive分区表 Hive使用select语句进行查询的时候一般会扫描整个表内容 会消耗很多时间做没必要的工作 Hive可以在创建表的时候指定分区空间 这样在做查询的时候就可以很好的提高查询的效率 创建分区表的语法 create tabl