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. SpringBoot:整合Druid、MyBatis

    目录 简介 JDBC 导入依赖 连接数据库 CRUD操作 自定义数据源 DruidDataSource Druid 简介 配置数据源 配置 Druid 数据源监控 配置 Druid web 监控 fi ...

  2. CSS颜色及文本字体

    CSS颜色及文本字体 CSS颜色表示法 CSS文本设置 CSS边框属性 背景属性 元素溢出 CSS颜色及文本字体 CSS颜色表示法 颜色名表示,比如:red 红色,yellow黄色,pick粉色 16 ...

  3. 王颖奇 20171010129《面向对象程序设计(java)》第九周学习总结

    实验九 异常.断言与日志 实验时间 2018-10-25 1.实验目的与要求 (1) 掌握java异常处理技术: (2) 了解断言的用法: (3) 了解日志的用途: (4) 掌握程序基础调试技巧: 2 ...

  4. Adobe Reader XI 打开后“已停止工作”的解决办法

    搜了好多方法按照步骤做完,基本无用,试了以下方法搞定. 具体方法是: 把域名解析到本机. 打开 C:\Windows\System32\drivers\etc\hosts 添加 127.0.0.1 a ...

  5. android的布局 (如何实现空心圆效果的布局)

    layer-list : 简单来说layer-list就是图层列表的意思,是用来创建LayerDrawable的,LayerDrawable是DrawableResource的一种,所以,layer- ...

  6. 仿真FFT(quartus安装)

    软件下载:http://dl.altera.com/13.1/?edition=subscription 安装步骤: 接下来,仿真FFT: http://www.openhw.org/article/ ...

  7. linux --vim 补充 .vimrc

    1.今天发现了一个新的功能.vimrc 1.这个是一个个人配置文件,可以在这个里面首先对vim进行一些设置呢 如果系统没有.vimrc文件,可以自己创建一个,touch .vimrc 举个栗子,我在. ...

  8. Linux中链接的概念

    一,软链接 touch f1 创建符号链接,两个文件inode不同 ln -s f1 f3 二,硬链接 touch f1 创建硬链接, 两个文件inode相同 ln  f1 f2 硬链接和软链接,最大 ...

  9. Git与GitHub常用操作

    --------------------------基本操作--------------------------clone 拷贝远程仓库commit 本地提交push 远程提交pull 更新本地--- ...

  10. 5、打断点(bpu)

    前言 先给大家讲一则小故事,在我们很小的时候是没有手机的,那时候跟女神聊天都靠小纸条.某屌丝A男对隔壁小王的隔壁女神C倾慕已久,于是天天小纸条骚扰,无奈中间隔着一个小王,这样小王就负责传小纸条了.有一 ...