一、外部表和内部表的区别
(1)创建表时指定external关键字,就是外部表,不指定external就是内部表
(2)内部表删除后把元数据和数据都删除了,外部表删除后只是删除了元数据,不会删除hdfs上的数据文件
(3)外部表创建表时通过location指定存放表数据的hdfs上的路径,而内部表是默认存放在hive-site.xml中
设置的warehouse中,会在warehouse这个目录下以表名创建文件夹,数据就存放在这里。
 
二、.hive表分区
 
hive表分区其实就是分目录,表是大目录,分区是子目录,通过分区来实现分目录存放数据
分区由于是目录,不能带有特殊符号,分区列的值要转化为文件夹的存储路径,所以如果分区列的值中包含特殊值,如 '%', ':', '/', '#',它将会被使用%加上2字节的ASCII码进行转义,分区字段并不是表中真实存在的字段,而是一个或者多个伪列。表的数据文件中实际上并不保存分区列的信息与数据,而是用这个字段来划分数据的
存放目录,使用分区可以加快查询速度,查询时可以直接查询某一个分区下的数据,而不用管其他分区的数据
 
 
静态分区:
写入数据的时候就知道了(指定了)分区的名字
 
 
动态分区:
在写入数据的时候不知道分区的名字,当有符合分区条件的数据的时候会给它增加新的分区。
动态分区需要提前设置好连个参数,不然建分区的时候会抛异常
set hive.exec.dynamic.partition=true;
set hive.exec.dynamic.partition.mode=nostrict;
 
动态分区:当select的结果记录数大于零的时候才会创建分区
静态分区只要指定了就一定会创建。
 
动态分区会为每一个分区配上reduce数。比如设置了set mapreduce.job.reduces=100.设置了reduce的个数。
当有两个分区,如果每一个结果集中都有数据,会为每一个分区配上100个reduce数,也就是namenode同时处理200个文件写操作,
这种操作如果在分区值很多的时候容易把namenode搞挂掉,因此写动态分区的时候要清楚分区的值和合理设置reduce的数量
 
三、分桶
桶是更细粒度的划分, 相同的数据分到一个桶里面,减少数据访问的量,对每一个表或者分区,hive可以进行进一步的分桶
 
对列的值哈希然后除以桶的个数求与的方式决定这条数据放到哪个桶里面去。
 
(1)分桶可以获得更高查询效率
(2)桶为表加上了额外的结构,hive查询的时候可以利用这种结构
两个表连接时相同的列上划分了桶的表可以使用map端进行连接,join连接时两个表有相同的列,如果这两个表都进行了桶的操作,那么这个保存相同列值得桶进行join操作就可以减少join的数量
 
 
分桶需要设置两个参数:
set hive.enforce.bucketing=true;
set hive.enforce.sorting=true;
 
四、数据
数据遵循的规则是相同数据尽量聚集在一起
这样数据访问时可以直接访问计算节点的本地数据,数据本地性,降低网络数据的流量和负载
数据存储方式
三种常用的方式:
seqencefile 压缩效率低,查询速度一般
textfile(默认存储方式)不做压缩,磁盘开销大,解析开销大,加载速度最快
rcfile (0.6.0之后支持) 压缩率最高,查询效率最高,数据加载最慢
另外还有
orc(0.11.0之后)
parquet(0.13.0)
avro(0.14.0)
inputformat

hive 表优化的更多相关文章

  1. Hive SQL 优化面试题整理

    Hive优化目标 在有限的资源下,执行效率更高 常见问题: 数据倾斜 map数设置 reduce数设置 其他 Hive执行 HQL --> Job --> Map/Reduce 执行计划 ...

  2. Hive:表1inner join表2结果group by优化

    问题背景 最近遇到一个比较棘手的事情:hive sql优化: lib表(id,h,soj,noj,sp,np)         --一个字典表 mitem表(md,mt,soj,noj,sp,np)- ...

  3. 大数据开发实战:Hive优化实战3-大表join大表优化

    5.大表join大表优化 如果Hive优化实战2中mapjoin中小表dim_seller很大呢?比如超过了1GB大小?这种就是大表join大表的问题.首先引入一个具体的问题场景,然后基于此介绍各自优 ...

  4. 大数据开发实战:Hive优化实战2-大表join小表优化

    4.大表join小表优化 和join相关的优化主要分为mapjoin可以解决的优化(即大表join小表)和mapjoin无法解决的优化(即大表join大表),前者相对容易解决,后者较难,比较麻烦. 首 ...

  5. Hive优化-大表join大表优化

    Hive优化-大表join大表优化 5.大表join大表优化 如果Hive优化实战2中mapjoin中小表dim_seller很大呢?比如超过了1GB大小?这种就是大表join大表的问题.首先引入一个 ...

  6. Hive性能优化

    1.概述 继续<那些年使用Hive踩过的坑>一文中的剩余部分,本篇博客赘述了在工作中总结Hive的常用优化手段和在工作中使用Hive出现的问题.下面开始本篇文章的优化介绍. 2.介绍 首先 ...

  7. Hive篇---Hive使用优化

    一.前述 本节主要描述Hive的优化使用,Hive的优化着重强调一个 把Hive SQL 当做Mapreduce程序去优化 二.主要优化点 1.Hive运行方式:本地模式集群模式 本地模式开启本地模式 ...

  8. Hive性能优化上的一些总结

    https://blog.csdn.net/mrlevo520/article/details/76339075 1.介绍 首先,我们来看看Hadoop的计算框架特性,在此特性下会衍生哪些问题? 数据 ...

  9. 关于hive的优化

    首先hive本质就是mapreduce,那么优化就从mapreduce开始入手. 然而mapreduce的执行快慢又和map和reduce的个数有关,所以我们先从这里下手,调整并发度. 关于map的优 ...

随机推荐

  1. [转]你所不知的 CSS ::before 和 ::after 伪元素用法

    SS 有两个说不上常用的伪类 :before 和 :after,偶尔会被人用来添加些自定义格式什么的,但是它们的功用不仅于此.前几天发现了 Creative Link Effects 这个非常有意思的 ...

  2. [转载]WPF控件拖动

    这篇博文总结下WPF中的拖动,文章内容主要包括: 1.拖动窗口 2.拖动控件 Using Visual Studio 2.1thumb控件 2.2Drag.Drop(不连续,没有中间动画) 2.3拖动 ...

  3. adi 程序烧写

    3.2 U-Boot Console Output Here we need set up minicom to open target board serial console. sudo mini ...

  4. [开发笔记]-C#判断文件类型

    判断文件真实的类型,不是通过扩展名来判断: /// <summary> /// 判断文件格式 /// http://www.cnblogs.com/babycool /// </su ...

  5. PropertyChangeSupport

    1 import java.beans.PropertyChangeListener; import java.beans.PropertyChangeSupport; /** * @author h ...

  6. sqoop 常用命令整理(一)

    这些内容是从sqoop的官网整理出来的,是1.4.3版本的Document,如果有错误,希望大家指正. 1.使用sqoop导入数据 sqoop import --connect jdbc:mysql: ...

  7. 在 Android studio 中 配置Gradle 进行 “动态编译期间,指定 远程服务器地址 ,生成多个安装包”

    需求: 在产品开发中,经常需要发布各个版本,每个版本的服务器地址有不同的服务器地址.比如 开发服务器使用 192.168.1.232服务器, 测试服务器使用 192.168.1.245服务器, 正式上 ...

  8. OpenResty最佳实践

    https://moonbingbing.gitbooks.io/openresty-best-practices/content/

  9. python 搜索引擎Whoosh中文文档和代码 以及jieba的使用

    注意, 数据库的表最好别有下划线 中文文档链接: https://mr-zhao.gitbooks.io/whoosh/content/%E5%A6%82%E4%BD%95%E7%B4%A2%E5%B ...

  10. MCMC采样理论的一点知识

    看了好多相关的知识,大致了解了一下马尔可夫链-蒙特卡罗采样理论,有必要记来下来. 蒙特卡罗积分:(来自:http://blog.csdn.net/itplus/article/details/1916 ...