[Hive_8] Hive 设计优化
0. 说明
在 Hive 中,数据库是一个文件夹,表也是文件夹
partition,是一个字段,是文件
前提:在 Hive 进行 where 子句查询的时候,会将条件语句和全表进行比对,搜索出所需的数据,性能极差,partition 就是为了避免全表扫描
bucket(桶表)
避免多级分区导致分区目录过多,以指定字段进行 hash 分桶
新型数据结构,以文件段的形式在分区表内部按照指定字段进行分隔
重要特性:优化 join 的速度
1. 分区
1.1 创建非分区表 user_nopar
create table user_nopar
(id int, name string, age int, province string, city string)
row format delimited
fields terminated by '\t';
1.2 加载数据
load data local inpath '/home/centos/files/user_nopar.txt' into table user_nopar;
1.3 创建分区表 user_par
create table user_par(id int, name string, age int)
partitioned by(province string, city string)
row format delimited
fields terminated by '\t';
1.4 手动添加分区
alter table user_par add partition(province='beijing',city='beijing');
1.5 将数据加载到指定分区(分区可以不存在)
load data local inpath '/home/centos/files/customers.txt'
into table user_par
partition (province='shanxi',city='taiyuan');
1.6 将表清空
truncate table user_par;
1.7 设置动态分区非严格模式,无需指定静态分区
set hive.exec.dynamic.partition.mode=nonstrict;
1.8 插入数据动态指定分区
insert into user_par
partition(province,city)
select * from user_nopar;
(PS: 在动态插入分区字段时注意,字段顺序必须要和分区顺序保持一致,和字段名称无关)
1.9 删除分区
alter table user_par2 drop partition(province='sichuan');
1.10 insert 数据到分区表
insert into user_par2 partition(province='USA', city='NewYork') select 10,'jerry',30;
1.11 查看指定表的分区
show partitions user_par2;
1.12 建立分区的依据
- 以日期或时间进行分区 比如 year, month, and day
- 以位置进行分区 比如 country, territory, state, and city
- 以业务逻辑进行分区
2. 分桶
2.1 创建桶表
create table user_bucket(id int, name string, age int) CLUSTERED BY (id) INTO 2 BUCKETS row format delimited fields terminated by '\t';
2.2 在桶表中转储数据
insert into user_bucket select id, name , age from user_par2;
2.3 查看 HDFS 中桶表的数据结构
2.4 将桶表和分区表一同使用建立新表 user_new, 分区在前
create table user_new(id int, name string, age int)
partitioned by (province string, city string)
CLUSTERED BY (id) INTO 2 BUCKETS
row format delimited
fields terminated by '\t';
2.5 通过 load 加载数据
load 并不会修改表中的数据结构,在桶表中的体现,就是没有将数据进行分段
load data local inpath '/home/centos/files/customers.txt' into table user_new partition (province='sichaun',city='chengdu');
2.6 insert 数据
insert into user_new partition(province='USA', city='NewYork') select 10,'jerry',30;
2.7 指定分桶字段
通过 join 字段进行桶字段的确定,在以下场景中分桶字段 a => no , b => uid
SELECT a.no, a.name, b.oname, b.oprice from customers a inner join orders b on a.no=b.uid;
3. 内部表 & 外部表
3.1 内部表
删除内部表的同时也会删除元数据,删除真实数据
MANAGED_TABLE 也叫托管表,是默认表类型
3.2 外部表
删除外部表的同时只删除元数据,不删除真实数据
场景:为了防止 drop 或者 truncate 表的时候数据丢失的问题
创建 external table
create external table user_external(id int, name string, age int);
insert into user_external select id,name,age from user_par;
[Hive_8] Hive 设计优化的更多相关文章
- HBase最佳实践-列族设计优化
本文转自hbase.收藏学习下. 随着大数据的越来越普及,HBase也变得越来越流行.会用HBase现在已经变的并不困难,然而,怎么把它用的更好却并不简单.那怎么定义'用的好'呢?很简单,在保证系统稳 ...
- Hive性能优化
1.概述 继续<那些年使用Hive踩过的坑>一文中的剩余部分,本篇博客赘述了在工作中总结Hive的常用优化手段和在工作中使用Hive出现的问题.下面开始本篇文章的优化介绍. 2.介绍 首先 ...
- 《Java程序性能优化》学习笔记 设计优化
豆瓣读书:http://book.douban.com/subject/19969386/ 第一章 Java性能调优概述 1.性能的参考指标 执行时间: CPU时间: 内存分配: 磁盘吞吐量: 网络吞 ...
- Web交互设计优化的简易check list
Web交互设计优化的简易check list 00 | 时间: 2011-02-11 | 28,842 Views 交互设计, 用户研究 “优化已有产品的体验”,这是用户体验相关岗位职责中常见的描 ...
- (数字IC)低功耗设计入门(六)——门级电路低功耗设计优化
三.门级电路低功耗设计优化 (1)门级电路的功耗优化综述 门级电路的功耗优化(Gate Level Power Optimization,简称GLPO)是从已经映射的门级网表开始,对设计进行功耗的优化 ...
- Hive篇---Hive使用优化
一.前述 本节主要描述Hive的优化使用,Hive的优化着重强调一个 把Hive SQL 当做Mapreduce程序去优化 二.主要优化点 1.Hive运行方式:本地模式集群模式 本地模式开启本地模式 ...
- Hive性能优化上的一些总结
https://blog.csdn.net/mrlevo520/article/details/76339075 1.介绍 首先,我们来看看Hadoop的计算框架特性,在此特性下会衍生哪些问题? 数据 ...
- 《Java程序性能优化》之设计优化
豆瓣读书:http://book.douban.com/subject/19969386/ 第一章 Java性能调优概述 1.性能的参考指标 执行时间: CPU时间: 内存分配: 磁盘吞吐量: 网络吞 ...
- 关于hive的优化
首先hive本质就是mapreduce,那么优化就从mapreduce开始入手. 然而mapreduce的执行快慢又和map和reduce的个数有关,所以我们先从这里下手,调整并发度. 关于map的优 ...
随机推荐
- vux环境配置
第一步 在vue项目中的package.json文件的dependencies中添加下面三行,即安装vux及其相关依赖 "vux":"^2.7.3", &quo ...
- MyBatis源码解析(四)——DataSource数据源模块
原创作品,可以转载,但是请标注出处地址:http://www.cnblogs.com/V1haoge/p/6634880.html 1.回顾 上一文中解读了MyBatis中的事务模块,其实事务操作无非 ...
- python实战学习之numpy学习
numpy基础要点 1.生成数组 np.array([]) 2.变量的类型 numpy.ndarray 3.数据的类型 int8,float64,float32,bool等 4.数据的类型转换 x.a ...
- 使用postman进行并发测试
1.打开postman软件 左侧栏点击+号键,创建一个并发测试文件夹 2.主面板点击+号键,输入一个测试地址,点击save按钮保存到并发测试文件夹 3.点击三角箭头,再点击Run,弹出Collecti ...
- MySQL系列详解二:MySQL语句操作-技术流ken
简介 本篇博客将详细讲解mysql的一些常用sql语句操作,例如创建数据库,删除数据库,创建表,修改表,删除表,以及简单查询案例. 关于mysql数据中的SQL的大小写问题 1.不区分大小写 1. s ...
- htmlUnit加持,网络小蜘蛛的超级进化
前言 前段时间写了个小说线上采集阅读(猛戳这里:https://www.cnblogs.com/huanzi-qch/p/9817831.html),当我们去采集起点网的小说目录时发现目录数据没有在h ...
- ASP.NET MVC 学习笔记-2.Razor语法
1. 表达式 表达式必须跟在“@”符号之后, 2. 代码块 代码块必须位于“@{}”中,并且每行代码必须以“:”结尾.代码块中定义的变量可能会被同一个域中的其他块使用. ...
- PHP之单例模式
之前记得有写过PHP的几种这模式.这几天看群里在问单列模式,觉得还是有必要再深入写清楚下..其实单例模式很好理解滴哦 单例模式顾名思义,就是只有一个实例,作为对象的创建模式,单例模式确保某一个类只有一 ...
- springMVC_05结果跳转方式
一.总结 总共有四个, 1.设置ModelAndView的值,根据view和视图解析器跳转到指定的页面 2.通过servletapi对象来实现,不需要视图解析器 3.通过springmvc来实现转发和 ...
- 2017-11-09 中英文代码对比系列之Java一例
原文: https://zhuanlan.zhihu.com/p/30905033. 作者为本人. 这个系列将对同一段代码进行中文命名和英文命名两个版本的比较. 目的包括, 演示中文命名, 发现命名时 ...