1. 分区表:
建表语句中添加:partitioned by (col1 string, col2 string)
create table emp_pt(id int, name string, job string, mgr int, hiredate string, salary double, bonus double, deptid int) partitioned by (year string) row format delimited fields terminated by "\t"; 重点:partitioned by (year string) 导入数据:
insert overwrite table emp_pt partition(year="1980") select * from emp where year(hiredate)=1980; // hdfs会在emp_pt下,新建year=1980目录
insert overwrite table emp_pt partition(year="1981") select * from emp where year(hiredate)=1981;
insert overwrite table emp_pt partition(year="1982") select * from emp where year(hiredate)=1982; 查看HDFS目录结构,每个分区一个目录,目录名称:year=1980
hdfs dfs -ls /user/hive/warehouse/functiontest.db/emp_pt/
hdfs dfs -ls /user/hive/warehouse/functiontest.db/emp_pt/year=1980 查询:
show partitions emp_pt;
select * from emp_pt where year=1980; 分区之前,select需要遍历所有数据进行查找;
分区后,通过分区进行查找,只需要查找对应目录下的数据即可。 删除分区:
alter table emp_pt drop partition( year=1980);

2.二级分区:

建表时,partitioned by 包含两个字段即可。
create table emp_pt2(id int, name string, job string, mgr int, hiredate string, salary double, bonus double, deptid int) partitioned by (year string, month string) row format delimited fields terminated by "\t"; 导入数据:
insert overwrite table emp_pt2 partition(year=1980, month=12) select * from emp where year(hiredate)=1980 and month(hiredate)=12;
insert overwrite table emp_pt2 partition(year=1981, month=11) select * from emp where year(hiredate)=1981 and month(hiredate)=11;
insert overwrite table emp_pt2 partition(year=1981, month=12) select * from emp where year(hiredate)=1981 and month(hiredate)=12; 查询,根据分区进行查询。
  1. 动态分区
静态分区需要手动指定分区名称,当分区非常多时,无法一一指定。此时可以使用动态分区表。
建表语句不变,导入数据的方式改变了。 新建表:
create table emp_pt3 like emp_pt2; 导入数据:
insert overwrite table emp_pt3 partition(year, month) select *, year(hiredate) as year, month(hiredate) as month from emp; 提示:
Error: Error while compiling statement: FAILED: SemanticException [Error 10096]: Dynamic partition strict mode requires at least one static partition column. To turn this off set hive.exec.dynamic.partition.mode=nonstrict (state=42000,code=10096) 再执行load,导入成功。 查看HDFS目录结构:
hdfs dfs -ls -R /user/hive/warehouse/functiontest.db/emp_pt3
动态分区默认是以严格模式执行的,在这种模式下需要至少一个分区字段是静态的。这有助于阻止因设计错误导致导致查询差生大量的分区。列如:用户可能错误使用时间戳作为分区表字段。然后导致每秒都对应一个分区!
关闭严格分区模式
动态分区模式时是严格模式,也就是至少有一个静态分区。
set hive.exec.dynamic.partition.mode=nonstrict //分区模式,默认strict
set hive.exec.dynamic.partition=true //开启动态分区,默认true
set hive.exec.max.dynamic.partitions=1000 // 默认1000
  1. 分桶
建表:
create table emp_pt4(id int, name string, job string, mgr int, hiredate string, salary double, bonus double, deptid int) partitioned by (year string) clustered by (salary) sorted by (id) into 5 buckets row format delimited fields terminated by "\t"; 重点:clustered by (salary) sorted by (id) into 5 buckets 导入数据:
insert overwrite table emp_pt4 partition(year=1981) select * from emp where year(hiredate)=1981; 查看HDFS目录结构,目录下产生多个文件,每个文件就是一个桶;
hdfs dfs -ls -R /user/hive/warehouse/functiontest.db/emp_pt4
  1. 抽样
没有分桶的表也能抽样,但需全表扫描,效率不高。而如果通过分桶字段进行抽样,则避免了全表扫描。

	按桶抽样:
select * from emp tablesample(bucket 1 out of 5 on salary) s; // 返回空,第一个桶本来就没数据
select * from emp tablesample(bucket 2 out of 5 on salary) s; // 返回第二个桶的数据
hdfs dfs -cat /user/hive/warehouse/functiontest.db/emp_pt4/year=1981/000004_0 // 查看HDFS文件,跟上面select内容是一样的 按百分比抽样,抽取一半数据:
select * from emp_pt4 tablesample(50 percent); 按行抽样:
select * from emp_pt4 tablesample(2 rows);

【HIVE】(2)分区表、二级分区、动态分区、分桶、抽样的更多相关文章

  1. hive中简单介绍分区表(partition table)——动态分区(dynamic partition)、静态分区(static partition)

    一.基本概念 hive中分区表分为:范围分区.列表分区.hash分区.混合分区等. 分区列:分区列不是表中的一个实际的字段,而是一个或者多个伪列.翻译一下是:“在表的数据文件中实际上并不保存分区列的信 ...

  2. 大数据学习----day27----hive02------1. 分桶表以及分桶抽样查询 2. 导出数据 3.Hive数据类型 4 逐行运算查询基本语法(group by用法,原理补充) 5.case when(练习题,多表关联)6 排序

    1. 分桶表以及分桶抽样查询 1.1 分桶表 对Hive(Inceptor)表分桶可以将表中记录按分桶键(某个字段对应的的值)的哈希值分散进多个文件中,这些小文件称为桶. 如要按照name属性分为3个 ...

  3. Hive分区(静态分区+动态分区)

    Hive分区的概念与传统关系型数据库分区不同. 传统数据库的分区方式:就oracle而言,分区独立存在于段里,里面存储真实的数据,在数据进行插入的时候自动分配分区. Hive的分区方式:由于Hive实 ...

  4. 对现有Hive的大表进行动态分区

    分区是在处理大型事实表时常用的方法.分区的好处在于缩小查询扫描范围,从而提高速度.分区分为两种:静态分区static partition和动态分区dynamic partition.静态分区和动态分区 ...

  5. Hive Experiment 2(表动态分区和IDE)

    1.使用oracle sql developer 4.0.3作为hive query的IDE. 下载hive-jdbc driver http://www.cloudera.com/content/c ...

  6. hive学习(六) 参数和动态分区

    1.hive 参数.变量 1.1hive的命名空间: hive当中的参数.变量,都是以命名空间开头  

  7. hive从入门到放弃(四)——分区与分桶

    今天讲讲分区表和分桶表,前面的文章还没看的可以点击链接: hive从入门到放弃(一)--初识hive hive从入门到放弃(二)--DDL数据定义 hive从入门到放弃(三)--DML数据操作 分区 ...

  8. Hive学习之动态分区及HQL

    Hive动态分区 1.首先创建一个分区表create table t10(name string) partitioned by(dt string,value string)row format d ...

  9. hive -- 分区,分桶(创建,修改,删除)

    hive -- 分区,分桶(创建,修改,删除) 分区: 静态创建分区: 1. 数据: john doe 10000.0 mary smith 8000.0 todd jones 7000.0 boss ...

随机推荐

  1. 【Hadoop离线基础总结】Mac版VMware Fusion虚拟机磁盘挂载

    步骤概览 1.打开所要挂载磁盘的虚拟机的设置(此时必须关机) 2.打开硬盘设置 3.添加设备 4.选择新硬盘 5.设置如下图 6.将虚拟机开机,输入 df-lh ,查看当前虚拟机磁盘 7.输入 fdi ...

  2. Mysql常用sql语句(13)- having 过滤分组结果集

    测试必备的Mysql常用sql语句,每天敲一篇,每次敲三遍,每月一循环,全都可记住!! https://www.cnblogs.com/poloyy/category/1683347.html 前言 ...

  3. spring data jpa 多对多 ManyToMany

    环境搭建 源码地址:gitee:https://gitee.com/ytfs-dtx/JPA 导入依赖 <properties> <spring.version>5.2.5.R ...

  4. 译文:在GraalVM中部署运行Spring Boot应用

    GraalVM是一种高性能的多语言虚拟机,用于运行以JavaScript等基于LLVM的各种语言编写的应用程序.对于Java应用也可作为通常JVM的替代,它更具有性能优势.GraalVM带来的一个有趣 ...

  5. Elasticsearch系列---几个高级功能

    概要 本篇主要介绍一下搜索模板.映射模板.高亮搜索和地理位置的简单玩法. 标准搜索模板 搜索模板search tempalte高级功能之一,可以将我们的一些搜索进行模板化,使用现有模板时传入指定的参数 ...

  6. wangeditor在移动端的web应用

    废话不多说,直接上代码 前端(前端多说一句,在初始使用阶段,不知道是怎么回事,复制在看云上的文档的配置参数时,一直有错误,后台获取不到$_file,整整一上午,下午上网搜了一下别人的上传图片代码才好用 ...

  7. 《机器学习_02_线性模型_Logistic回归》

    import numpy as np import os os.chdir('../') from ml_models import utils import matplotlib.pyplot as ...

  8. PAT 1010 Radix (25分) radix取值无限制,二分法提高效率

    题目 Given a pair of positive integers, for example, 6 and 110, can this equation 6 = 110 be true? The ...

  9. 使用gitHub和git进行团队合作开发

    1.创建仓库(项目)-----组织者(Leader)和团队成员 1)Leader在gitHub上创建一个新组织(New organization),然后邀请成员加入 2)Leader在该组织下创建一个 ...

  10. 王艳 201771010127《面向对象程序设计(java)》第二周学习总结

     王艳 201771010127<面向对象程序设计(java)>第二周学习总结 第一部分:理论知识学习部分 3.1:基本概念. 1)标识符:标识符由字母.数字.美元符号以及下划线组成.且第 ...