一、外部表和内部表的区别
(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. Go语言学习(四)经常使用类型介绍

    1.布尔类型 var v1 bool v1 = true; v2 := (1==2) // v2也会被推导为bool类型 2.整型 类 型 长度(字节) 值 范 围 int8 1  128 ~ 12 ...

  2. IIS时间格式设置

    IIS时间格式调整: (已解决)今天在用IIS7的时候发现一个关于时间格式的问题,当我在ASP中使用now()时间函数的时候,日期是以“/”来分隔,而不是以“-”来分隔的,使得我在运行程序的时候老出错 ...

  3. UIButton的竖排图片和文本

    UIButton的竖排图片和文本html, body {overflow-x: initial !important;}.CodeMirror { height: auto; } .CodeMirro ...

  4. MyBatis拦截器的执行顺序引发的MyBatis源码分析

    你猜一下哪个先执行?反正不要按常规来. <plugins> <plugin interceptor="com.Interceptor1"></plug ...

  5. C语言 · 瓷砖铺放

    算法训练 瓷砖铺放   时间限制:1.0s   内存限制:512.0MB        锦囊1 递归或递推.   问题描述 有一长度为N(1<=N<=10)的地板,给定两种不同瓷砖:一种长 ...

  6. 宇宙最强spacemacs

    这个标题背后的潜台词其实是:逼格是什么炼成的? 此处省略一万字. Emacs就不多说了,神之编辑器,但其快捷键实在是....Evil.好啦,现在来了Spacemacs,结合Vim与Emacs二者的优点 ...

  7. Android(我还是个菜鸟)——UI-开源框架ImageLoader的完美例子

    开源框架ImageLoader 可在文件里面找——Desktop.zip(原文件为jar格式) 使用这个框架的好处: 让图片能在异步加载更加流畅,可以显示大量图片,在拖动ListView的时候不会出现 ...

  8. python将dict中的unicode打印成中文

    import json a = {u'content': {u'address_detail': {u'province': u'\u5409\u6797\u7701', u'city': u'\u9 ...

  9. 【C】——extern

    直接上例子: 1.c #include<stdio.h> int main() { extern int a; a += ; printf("%d\n",a); tex ...

  10. 彻底去除Win10“快速访问”

    windows10的“快速访问”功能对于我个人用处不大,作为一个爱折腾的人决定尝试彻底除去“快速访问”这个侧边栏. 注意:此操作需要确保你已经设置了[让点击Win10任务栏“文件资源管理器”图标打开“ ...