【Hive】Hive分区表
分区作为一种提高数据操作灵活性的手段,被广泛应用于关系型数据库中。在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分区表相关推荐
- sqoop动态分区导入mysql,使用sqoop import从mysql往hive含分区表中导入数据的一些注意事项...
先看下面这条语句,它实现的功能是将特定日期的数据从mysql表中直接导入hive $ sqoop import \ --connect jdbc:mysql://192.168.xx.xx:3306/ ...
- Hive外部分区表加载flume打到hdfs上文件,读不到.tmp文件
摘要 flume打到hdfs上时,按照文件大小生成文件,在达到指定大小之前数据都是以.tmp文件形式保存在hdfs上,hive外部表也会加载这些文件,但是当文件完成后.tmp会消失,这时候hive会报 ...
- Hive 之 分区表,外部表,桶表
转自: http://chengjianxiaoxue.iteye.com/blog/2167036 1 受控表(managed table): hive中将创建的表和实际对应hdfs目录结构和文件相 ...
- [Hive] - Hive参数含义详解
hive中参数分为三类,第一种system环境变量信息,是系统环境变量信息:第二种是env环境变量信息,是当前用户环境变量信息:第三种是hive参数变量信息,是由hive-site.xml文件定义的以 ...
- Spark on Hive Hive on Spark傻傻分不清?
Spark on Hive? Hive on Spark傻傻分不清? 1 spark on hive Spark on hive,是spark计算引擎依托hive data source,spark ...
- Hive——hive安装
1.Hive安装地址 1.Hive官网地址 http://hive.apache.org/ 2.文档查看地址 https://cwiki.apache.org/confluence/display/H ...
- hive -- hive + hiveclient (hive 客户端)
五个节点的hadoop服务器集群搭建完成后,得想办法提高开发效率,mapreduce 我不是高手,写起来有点麻烦,公司业务不等人,还是决定上hive. 话说想玩好hadoop 还得学精mapreduc ...
- Hive ---- Hive入门
Hive ---- Hive入门 1. 什么是Hive 1. Hive简介 2. Hive本质 2. Hive架构原理 1. 用户接口:Client 2. 元数据:Metastore 3. 驱动器:D ...
- 深入浅出学Hive——Hive原理
目录: 初始Hive Hive安装与配置 Hive内建操作符与函数开发 Hive JDBC Hive参数 Hive高级编程 Hive QL Hive Shell基本操作 Hive优化 Hive体系结构 ...
- hive创建分区表 指定分隔符_HIVE 对于分区表的操作
CREATE EXTERNAL TABLE IF NOT EXISTS data_zh( ROWKEY STRING, STATION INT, YEAR INT, MONTH INT, DAY IN ...
最新文章
- 信号扫描_图文并茂,一文读懂信号源
- twisted系列教程六–继续重构twisted poetry client
- vb.net 同时给多个属性赋值_系统小技巧:充分用好文件的时间属性
- java 与c des_Java和C/C++进行DES/AES密文传输
- Adobe 修复严重的 Photoshop 缺陷
- 列出搜索过的数据(类似京东顶部搜索框)
- Interesting Finds: 2008.01.04
- Flink Forward Asia 2020 -- Keynote 总结
- 邮件撤回方法详解,一键解决发错邮件的尴尬
- 阿里笔试之Java分词统计
- linux java环境变量不生效_Linux下java环境变量配置问题,解决 重新打开bash后JDK环境变量无效问题...
- 新款HTTP代理抓包工具Proxyman(界面美观、功能强大)
- ESP32 快速入门(九):自定义 ESP32 分区表 partitions.csv
- 【原创】股市快讯自动更新器
- 江南大学计算机专业就业率,江南大学这些本科和硕士专业就业率100%!2019江大毕业生就业报告...
- 人工智能数学基础---不定积分4:有理函数求积分的方法
- 数据库笔记 第2章 关系数据库
- 运输验证ASTM D4169标准 富港检测技术(东莞)有限公司
- markdown修改文字背景色
- excel设置今天和过去日期所在行显示2种不同的颜色?