分区作为一种提高数据操作灵活性的手段,被广泛应用于关系型数据库中。在Hive中我们同样可以采用分区的方式来提高数据操作效率,不同于关系型数据库(如Oracle),Hive的分区表既可以是内部表,也可以是外部表。
本篇文章主要介绍如何在Hive中创建分区表、分区表上的DDL操作,以及使用分区表的注意事项。

1. 创建分区表

1.1 创建内部分区表
create table myhive.test_internal(id int) partitioned by (date string)
row format delimited fields terminated by ' ';
1.2 创建外部分区表
create external table myhive.test_external(id int) partitioned by (date string)
row format delimited fields terminated by ' ';

2. 添加分区

内部分区表和外部分区表都可以使用如下2种方式添加分区:
(1)ALTER TABLE … ADD PARTITION …
(2)MSCK REPAIR TABLE …

2.1 内部分区表添加分区
#创建分区目录
hdfs dfs -mkdir -p /user/hive/warehouse/myhive.db/test_internal/date=2020-01-01
hdfs dfs -mkdir -p /user/hive/warehouse/myhive.db/test_internal/date=2020-01-15
hdfs dfs -mkdir -p /user/hive/warehouse/myhive.db/test_internal/date=2020-01-20#上传分区对应文件
hdfs dfs -put 2020-01-01.txt /user/hive/warehouse/myhive.db/test_internal/date=2020-01-01/
hdfs dfs -put 2020-01-15.txt /user/hive/warehouse/myhive.db/test_internal/date=2020-01-15/
hdfs dfs -put 2020-01-20.txt /user/hive/warehouse/myhive.db/test_internal/date=2020-01-20/#查看分区为空
hive (myhive)> show partitions test_internal;
OK
partition
Time taken: 0.096 seconds#ADD PARTITION方式添加分区
hive (myhive)> alter table test_internal add partition (date='2020-01-01');
OK
Time taken: 0.14 seconds#查看添加后结果,有一个分区(date='2020-01-01')
hive (myhive)> show partitions test_internal;
OK
partition
date=2020-01-01
Time taken: 0.097 seconds, Fetched: 1 row(s)#查询添加分区后的表数据
hive (myhive)> select * from test_internal;
OK
test_internal.id        test_internal.date
1       2020-01-01
Time taken: 0.104 seconds, Fetched: 1 row(s)#MSCK REPAIR方式添加分区
hive (myhive)> msck repair table test_internal;
OK
Partitions not in metastore:    test_internal:date=2020-01-15   test_internal:date=2020-01-20
Repair: Added partition to metastore test_internal:date=2020-01-15
Repair: Added partition to metastore test_internal:date=2020-01-20
Time taken: 0.241 seconds, Fetched: 3 row(s)#查看添加后结果,分区全部添加进来了
hive (myhive)> show partitions test_internal;
OK
partition
date=2020-01-01
date=2020-01-15
date=2020-01-20
Time taken: 0.091 seconds, Fetched: 3 row(s)#查询添加分区后的表数据
hive (myhive)> select * from test_internal;
OK
test_internal.id        test_internal.date
1       2020-01-01
2       2020-01-15
3       2020-01-20
Time taken: 0.104 seconds, Fetched: 3 row(s)
2.2 外部分区表添加分区
#创建目录
hdfs dfs -mkdir -p /user/hive/warehouse/myhive.db/test_external/date=2020-01-01
hdfs dfs -mkdir -p /user/hive/warehouse/myhive.db/test_external/date=2020-01-15
hdfs dfs -mkdir -p /user/hive/warehouse/myhive.db/test_external/date=2020-01-20#上传文件
hdfs dfs -put 2020-01-01.txt /user/hive/warehouse/myhive.db/test_external/date=2020-01-01/
hdfs dfs -put 2020-01-15.txt /user/hive/warehouse/myhive.db/test_external/date=2020-01-15/
hdfs dfs -put 2020-01-20.txt /user/hive/warehouse/myhive.db/test_external/date=2020-01-20/#查看分区为空
hive (myhive)> show partitions test_external;
OK
partition
Time taken: 0.093 seconds#ADD PARTITION方式添加分区
hive (myhive)> alter table test_external add partition (date='2020-01-01');
OK
Time taken: 0.14 seconds#查看添加后结果,有一个分区(date='2020-01-01')
hive (myhive)> show partitions test_external;
OK
partition
date=2020-01-01
Time taken: 0.082 seconds, Fetched: 1 row(s)#查询添加分区后的表数据
hive (myhive)> select * from test_external;
OK
test_external.id        test_external.date
1       2020-01-01
Time taken: 0.108 seconds, Fetched: 1 row(s)#MSCK REPAIR方式添加分区
hive (myhive)> msck repair table test_external;
OK
Partitions not in metastore:    test_external:date=2020-01-15   test_external:date=2020-01-20
Repair: Added partition to metastore test_external:date=2020-01-15
Repair: Added partition to metastore test_external:date=2020-01-20
Time taken: 0.198 seconds, Fetched: 3 row(s)#查看添加后结果,分区全部添加进来了
hive (myhive)> show partitions test_external;
OK
partition
date=2020-01-01
date=2020-01-15
date=2020-01-20
Time taken: 0.081 seconds, Fetched: 3 row(s)#查询添加分区后的表数据
hive (myhive)> select * from test_external;
OK
test_external.id        test_external.date
1       2020-01-01
2       2020-01-15
3       2020-01-20
Time taken: 0.098 seconds, Fetched: 3 row(s)

3. 重命名分区

内部分区表和外部分区表都使用RENAME TO PARTITION命令重命名分区,以内部分区表为例:

alter table myhive.test_internal partition (date='2020-01-15') rename to partition (date='2020-01-16');

4. 删除分区

内部分区表和外部分区表都使用DROP PARTITION命令删除分区,以内部分区表为例:

alter table myhive.test_internal drop partition (date='2020-01-01');

5. 分区表的注意事项

(1)应选择低基数列作为分区键;
(2)尽量避免分区过小,建议大于1G;

总结

Hive中的一个分区就是一个目录,分区键值就是目录名称,分区键是表中的一个虚拟列;
当数据量过大时可采用分区表提高查询效率;
需谨慎选择分区键,尽量选用低基数列;
ADD PARTITION需要指定分区键值,MSCK REPAIR可以批量创建分区和数据文件的映射;

【Hive】Hive分区表相关推荐

  1. sqoop动态分区导入mysql,使用sqoop import从mysql往hive含分区表中导入数据的一些注意事项...

    先看下面这条语句,它实现的功能是将特定日期的数据从mysql表中直接导入hive $ sqoop import \ --connect jdbc:mysql://192.168.xx.xx:3306/ ...

  2. Hive外部分区表加载flume打到hdfs上文件,读不到.tmp文件

    摘要 flume打到hdfs上时,按照文件大小生成文件,在达到指定大小之前数据都是以.tmp文件形式保存在hdfs上,hive外部表也会加载这些文件,但是当文件完成后.tmp会消失,这时候hive会报 ...

  3. Hive 之 分区表,外部表,桶表

    转自: http://chengjianxiaoxue.iteye.com/blog/2167036 1 受控表(managed table): hive中将创建的表和实际对应hdfs目录结构和文件相 ...

  4. [Hive] - Hive参数含义详解

    hive中参数分为三类,第一种system环境变量信息,是系统环境变量信息:第二种是env环境变量信息,是当前用户环境变量信息:第三种是hive参数变量信息,是由hive-site.xml文件定义的以 ...

  5. Spark on Hive Hive on Spark傻傻分不清?

    Spark on Hive? Hive on Spark傻傻分不清? 1 spark on hive Spark on hive,是spark计算引擎依托hive data source,spark ...

  6. Hive——hive安装

    1.Hive安装地址 1.Hive官网地址 http://hive.apache.org/ 2.文档查看地址 https://cwiki.apache.org/confluence/display/H ...

  7. hive -- hive + hiveclient (hive 客户端)

    五个节点的hadoop服务器集群搭建完成后,得想办法提高开发效率,mapreduce 我不是高手,写起来有点麻烦,公司业务不等人,还是决定上hive. 话说想玩好hadoop 还得学精mapreduc ...

  8. Hive ---- Hive入门

    Hive ---- Hive入门 1. 什么是Hive 1. Hive简介 2. Hive本质 2. Hive架构原理 1. 用户接口:Client 2. 元数据:Metastore 3. 驱动器:D ...

  9. 深入浅出学Hive——Hive原理

    目录: 初始Hive Hive安装与配置 Hive内建操作符与函数开发 Hive JDBC Hive参数 Hive高级编程 Hive QL Hive Shell基本操作 Hive优化 Hive体系结构 ...

  10. hive创建分区表 指定分隔符_HIVE 对于分区表的操作

    CREATE EXTERNAL TABLE IF NOT EXISTS data_zh( ROWKEY STRING, STATION INT, YEAR INT, MONTH INT, DAY IN ...

最新文章

  1. 信号扫描_图文并茂,一文读懂信号源
  2. twisted系列教程六–继续重构twisted poetry client
  3. vb.net 同时给多个属性赋值_系统小技巧:充分用好文件的时间属性
  4. java 与c des_Java和C/C++进行DES/AES密文传输
  5. Adobe 修复严重的 Photoshop 缺陷
  6. 列出搜索过的数据(类似京东顶部搜索框)
  7. Interesting Finds: 2008.01.04
  8. Flink Forward Asia 2020 -- Keynote 总结
  9. 邮件撤回方法详解,一键解决发错邮件的尴尬
  10. 阿里笔试之Java分词统计
  11. linux java环境变量不生效_Linux下java环境变量配置问题,解决 重新打开bash后JDK环境变量无效问题...
  12. 新款HTTP代理抓包工具Proxyman(界面美观、功能强大)
  13. ESP32 快速入门(九):自定义 ESP32 分区表 partitions.csv
  14. 【原创】股市快讯自动更新器
  15. 江南大学计算机专业就业率,江南大学这些本科和硕士专业就业率100%!2019江大毕业生就业报告...
  16. 人工智能数学基础---不定积分4:有理函数求积分的方法
  17. 数据库笔记 第2章 关系数据库
  18. 运输验证ASTM D4169标准 富港检测技术(东莞)有限公司
  19. markdown修改文字背景色
  20. excel设置今天和过去日期所在行显示2种不同的颜色?

热门文章

  1. 如何配置 tomcat 服务器
  2. 分析SpinnerActivityTest中有关控件操作以及UI线程问题
  3. Oracle数据库完全卸载
  4. windowfullscreen后键盘布局顶上去_手机输入法的派别之争,九宫格和全键盘究竟哪种更科学?...
  5. 为什么说ES6的class是语法糖?
  6. CAJ如何转成PDF
  7. 1.8 zip和unzip
  8. Trim or Discard or Unmap
  9. Castle的自定义类型转换
  10. 生成静态libevent