0. 说明

  在 Hive 中,数据库是一个文件夹,表也是文件夹

  partition,是一个字段,是文件

  前提:在 Hive 进行 where 子句查询的时候,会将条件语句和全表进行比对,搜索出所需的数据,性能极差,partition 就是为了避免全表扫描

  bucket(桶表)

  避免多级分区导致分区目录过多,以指定字段进行 hash 分桶

  新型数据结构,以文件段的形式在分区表内部按照指定字段进行分隔

  重要特性:优化 join 的速度


1. 分区

  1.1 创建非分区表 user_nopar

  1. create table user_nopar
  2. (id int, name string, age int, province string, city string)
  3. row format delimited
  4. fields terminated by '\t';

  1.2 加载数据

  1. load data local inpath '/home/centos/files/user_nopar.txt' into table user_nopar;

  1.3 创建分区表 user_par

  1. create table user_par(id int, name string, age int)
  2. partitioned by(province string, city string)
  3. row format delimited
  4. fields terminated by '\t';

  1.4 手动添加分区

  1.   alter table user_par add partition(province='beijing',city='beijing');

  1.5 将数据加载到指定分区(分区可以不存在)

  1.   load data local inpath '/home/centos/files/customers.txt'
      into table user_par
      partition (province='shanxi',city='taiyuan');

  1.6 将表清空

  1. truncate table user_par;

  1.7 设置动态分区非严格模式,无需指定静态分区

  1.   set hive.exec.dynamic.partition.mode=nonstrict;

  1.8 插入数据动态指定分区

  1. insert into user_par
  2. partition(province,city)
  3. select * from user_nopar;

  (PS: 在动态插入分区字段时注意,字段顺序必须要和分区顺序保持一致,和字段名称无关)

  1.9 删除分区

  1. alter table user_par2 drop partition(province='sichuan');

  1.10 insert 数据到分区表

  1. insert into user_par2 partition(province='USA', city='NewYork') select 10,'jerry',30;

  1.11 查看指定表的分区

  1.   show partitions user_par2;

  1.12 建立分区的依据

  1. 以日期或时间进行分区 比如 year, month, and day
  2. 以位置进行分区 比如 country, territory, state, and city
  3. 以业务逻辑进行分区

2. 分桶

  2.1 创建桶表

  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 在桶表中转储数据

  1.   insert into user_bucket select id, name , age from user_par2;

  2.3 查看 HDFS 中桶表的数据结构

  2.4 将桶表和分区表一同使用建立新表 user_new, 分区在前

  1. create table user_new(id int, name string, age int)
  2. partitioned by (province string, city string)
  3. CLUSTERED BY (id) INTO 2 BUCKETS
  4. row format delimited
  5. fields terminated by '\t';

  2.5 通过 load 加载数据

  load 并不会修改表中的数据结构,在桶表中的体现,就是没有将数据进行分段

  1. load data local inpath '/home/centos/files/customers.txt' into table user_new partition (province='sichaun',city='chengdu');

  2.6 insert 数据

  1. insert into user_new partition(province='USA', city='NewYork') select 10,'jerry',30;

  2.7 指定分桶字段

  通过 join 字段进行桶字段的确定,在以下场景中分桶字段 a => no , b => uid

  1. 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

  1. create external table user_external(id int, name string, age int);
  2.  
  3. insert into user_external select id,name,age from user_par;

[Hive_8] Hive 设计优化的更多相关文章

  1. HBase最佳实践-列族设计优化

    本文转自hbase.收藏学习下. 随着大数据的越来越普及,HBase也变得越来越流行.会用HBase现在已经变的并不困难,然而,怎么把它用的更好却并不简单.那怎么定义'用的好'呢?很简单,在保证系统稳 ...

  2. Hive性能优化

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

  3. 《Java程序性能优化》学习笔记 设计优化

    豆瓣读书:http://book.douban.com/subject/19969386/ 第一章 Java性能调优概述 1.性能的参考指标 执行时间: CPU时间: 内存分配: 磁盘吞吐量: 网络吞 ...

  4. Web交互设计优化的简易check list

    Web交互设计优化的简易check list 00 | 时间: 2011-02-11 | 28,842 Views 交互设计, 用户研究   “优化已有产品的体验”,这是用户体验相关岗位职责中常见的描 ...

  5. (数字IC)低功耗设计入门(六)——门级电路低功耗设计优化

    三.门级电路低功耗设计优化 (1)门级电路的功耗优化综述 门级电路的功耗优化(Gate Level Power Optimization,简称GLPO)是从已经映射的门级网表开始,对设计进行功耗的优化 ...

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

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

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

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

  8. 《Java程序性能优化》之设计优化

    豆瓣读书:http://book.douban.com/subject/19969386/ 第一章 Java性能调优概述 1.性能的参考指标 执行时间: CPU时间: 内存分配: 磁盘吞吐量: 网络吞 ...

  9. 关于hive的优化

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

随机推荐

  1. .Net Core 中间件之主机地址过滤(HostFiltering)源码解析

    一.介绍 主机地址过滤中间件相当于一个白名单,标记哪些主机地址能访问接口. 二.使用 新建WebAPI项目,修改Startup中的代码段如下所示.下面表示允许主机名为“localhost”的主机访问( ...

  2. TensorFlow中的Placement启发式算法模块——Placer

    背景 [作者:DeepLearningStack,阿里巴巴算法工程师,开源TensorFlow Contributor] 受限于单个Device的计算能力和存储大小,许多深度学习模型都有着使用模型分片 ...

  3. 乐观锁机制解决多层嵌套异步ajax问题

    前言 在项目中我们通常需要使用ajax异步嵌套去请求数据并做数据的展示,当我们多次快速的多次的发起ajax,因为ajax是异步的,每个ajax触发回调的时间都是不可控的,这样就会造成前面发起的ajax ...

  4. RNN入门(4)利用LSTM实现整数加法运算

      本文将介绍LSTM模型在实现整数加法方面的应用.   我们以0-255之间的整数加法为例,生成的结果在0到510之间.为了能利用深度学习模型模拟整数的加法运算,我们需要将输入的两个加数和输出的结果 ...

  5. [转]Windows Server 2016 服务器IIS配置

    本文转自:https://blog.csdn.net/corson/article/details/82185407 多余的话就不说了,配置Windows Server 2016服务器具体如下图    ...

  6. 第一册:lesson sixty seven。

    原文: The weekend. A:Hello , were you an tht butcher's? B:Yes I was. A:Were you at the butcher's too? ...

  7. C#线程同步--限量使用

    问题抽象:当某一资源同一时刻允许一定数量的线程使用的时候,需要有个机制来阻塞多余的线程,直到资源再次变得可用.线程同步方案:Semaphore.SemaphoreSlim.CountdownEvent ...

  8. 解码 id_token

    简介 id_token是一个特殊的token,在Microsoft Graph的认证和授权过程中颁发,它包含了已认证用户的一些信息.本文将介绍如何通过实例理解id_token,并且演示了如何解码. 准 ...

  9. js中const,var,let区别(转载)

    js中const,var,let区别 来源:https://www.cnblogs.com/zzsdream/p/6372729.html 今天第一次遇到const定义的变量,查阅了相关资料整理了这篇 ...

  10. c# dllimport 调用函数,参数乱码

    [DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)] [return: MarshalA ...