一、为什么要创建分区表

1、select查询中会扫描整个表内容,会消耗大量时间。由于相当多的时候人们只关心表中的一部分数据,

故建表时引入了分区概念。

2、hive分区表:是指在创建表时指定的partition的分区空间,若需要创建有分区的表,

需要在create表的时候调用可选参数partitioned by,详见表创建的语法结构。

二、实现创建、删除分区表

注意:
1、一个表可以拥有一个或者多个分区,每个分区以文件夹的形式单独存在表文件夹的目录下。

2、hive的表和列名不区分大小写(故建表时,都是小写)

3、分区是以字段的形式在表结构中存在,通过"desc table_name"命令可以查看到字段存在,该字段仅是分区的标识。

4、建表的语法(建分区可参见PARTITIONED BY参数):

CREATE [EXTERNAL] TABLE [IF NOT EXISTS] table_name [(col_name data_type [COMMENT col_comment], ...)] [COMMENT table_comment] 
[PARTITIONED BY (col_name data_type [COMMENT col_comment], ...)] 
[CLUSTERED BY (col_name, col_name, ...) [SORTED BY (col_name [ASC|DESC], ...)] INTO num_buckets BUCKETS] 
[ROW FORMAT row_format]
[STORED AS file_format] 
[LOCATION hdfs_path]

5、分区建表分为2种,一种是单分区,也就是说在表文件夹目录下只有一级文件夹目录。另外一种是多分区,表文件夹下出现多文件夹嵌套模式。(如果需要 group by 多个字段,建议按分区嵌套顺序 group by )

a、单分区建表语句:create table test_table (id int, content string) partitioned by (dt string);
   单分区表,按天分区,在表结构中存在id,content,dt三列。

b、双分区建表语句:create table test_table_2 (id int, content string) partitioned by (dt string, hour string);
   双分区表,按天和小时分区,在表结构中新增加了dt和hour两列。

6、增加分区表语法(表已创建,在此基础上添加分区):

ALTER TABLE table_name ADD partition_spec [ LOCATION 'location1' ] partition_spec [ LOCATION 'location2' ] ... partition_spec: : PARTITION (partition_col = partition_col_value, partition_col = partiton_col_value, ...)

用户可以用 ALTER TABLE ADD PARTITION 来向一个表中增加分区。当分区名是字符串时加引号。例:

ALTER TABLE test_table ADD PARTITION (dt='2016-08-08', hour='10') location '/path/uv1.txt' PARTITION (dt='2017-08-08', hour='12') location '/path/uv2.txt';

7、删除分区语法:

ALTER TABLE table_name DROP partition_spec, partition_spec,...

用户可以用 ALTER TABLE DROP PARTITION 来删除分区。分区的元数据和数据将被一并删除。例:

ALTER TABLE test_table DROP PARTITION (dt='2016-08-08', hour='10');

8、数据加载进分区表中语法:

LOAD DATA [LOCAL] INPATH 'filepath' [OVERWRITE] INTO TABLE tablename [PARTITION (partcol1=val1, partcol2=val2 ...)]

例:
LOAD DATA INPATH '/user/uv.txt' INTO TABLE test_table_2 PARTITION(dt='2016-08-08', hour='08'); LOAD DATA local INPATH '/user/hh/' INTO TABLE test_table  partition(dt='2013-02- 07');

当数据被加载至表中时,不会对数据进行任何转换。Load操作只是将数据复制至Hive表对应的位置。数据加载时在表下自动创建一个目录,文件存放在该分区下。

9、基于分区的查询的语句:

SELECT test_table.* FROM test_table WHERE test_table.dt>= '2008-08-08';

10、查看双分区语句:
hive> show partitions test_table_2; 
OK 
dt=2016-08-08/hour=10 
dt=2016-08-09/hour=10
dt=2008-08-09/hour=10

举例:

CREATE TABLE `incr_test_2`(`ord_id` string, `ord_no` string, `creat_date` string, `creat_time` string, `time_stamp` string)
COMMENT 'Imported by sqoop on 2016/08/08 14:53:43'
PARTITIONED BY ( `log_time` string)
ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe'
WITH SERDEPROPERTIES ( 'field.delim'='\u0001', 'line.delim'='\n', 'serialization.format'='\u0001')
STORED AS INPUTFORMAT 'org.apache.hadoop.mapred.TextInputFormat'
OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'
;

查看对应的建表信息:

hive (origin_test)> show create table incr_test_2;
OK
CREATE TABLE `incr_test_2`(`ord_id` string, `ord_no` string, `creat_date` string, `creat_time` string, `time_stamp` string)
COMMENT 'Imported by sqoop on 2016/08/04 14:53:43'
PARTITIONED BY ( `log_time` string)
ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe'
WITH SERDEPROPERTIES ( 'field.delim'='\u0001', 'line.delim'='\n', 'serialization.format'='\u0001')
STORED AS INPUTFORMAT 'org.apache.hadoop.mapred.TextInputFormat'
OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'
LOCATION'hdfs://nameservice/user/hive/warehouse/origin_test.db/incr_test_2'
TBLPROPERTIES ('transient_lastDdlTime'='1470293625')

查看分区表:

-- 查看单分区:
hive (origin_test)>show partitions incr_test_2;
OK
log_time=20160917182510
log_time=20160917192512
log_time=20160917202512
log_time=20160917212512
log_time=20160917222510
log_time=20160917232511
log_time=20160918002525
log_time=20160918012514
log_time=20160918022513
log_time=20160918032510
log_time=20160918042510
log_time=20160918052511
log_time=20160918062513
log_time=20160918072510
log_time=20160918082510
log_time=20160918092511
log_time=20160918102510
log_time=20160918112511
log_time=20160918122512
log_time=20160918132511
Time taken: 0.264 seconds, Fetched: 20 row(s)
hive (origin_ennenergy_transport)> 

[Hive基础]-- 创建分区表相关推荐

  1. Hive基础之分区表

    我们在做数据挖掘和分析的时候有时候只是针对某一段时间或者某一个月的数据,而我们在创建表的时候是将所有时间的数据都放在一起,这样就会导致我们在进行分析的时候会分析所有的数据,如果数据量很大的时候效率就会 ...

  2. Hive的基本操作-创建分区表

    分区表 在大数据中,最常用的一种思想就是分治,我们可以把大的文件切割划分成一个个的小的文件,这样每次操作一个小的文件就会很容易了,同样的道理,在hive当中也是支持这种思想的,就是我们可以把大的数据, ...

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

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

  4. hive 创建分区表 删除分区表 插入分区表

    目录 创建分区表 插入分区表 删除分区表 创建分区表 CREATE TABLE IF NOT EXISTS test( a string,b string )PARTITIONED BY (c str ...

  5. Hive创建分区表、动态插入、删除分区表

    如何在hive上建立分区表呢: 简单的创建sql如下: CREATE EXTERNAL TABLE t( `run_time` bigint , `enterprise_num` bigint ,) ...

  6. Hive 基础-进阶

    HIVE基础 1,安装:基于hadoop之上,先安装hadoop,安装在另外一篇博客有详细讲到. 2,hive的管理:cli方式,web界面方式 cli方式:直接输入#hive --service c ...

  7. Hive基础学习文档和入门教程

    问题导读 1.hive除了包含用户接口.元数据,还包含哪些内容? 2.hive包含哪些操作? 3.hive数据能否被修改? 4.hive优化有哪些常用方法? 摘要: Hive 是建立在 Hadoop ...

  8. Hive基础08、Hive引入Struct结构体

    Hive基础08.Hive引入Struct结构体 1.建表语句 创建一个温良贤淑女子的表 英文关键字解析: 1.CREATE TABLE 创建一个指定名字的表,如果库中已有相同名的表,则抛出异常: 用 ...

  9. Hive基础知识概念

    Hive基础 Hive 概念 Hive优缺点 优点 缺点 Hive名词概念 hive底层执行流程 hive 与RDBMS传统关系型数据库对比 查询语言 数据更新 执行延迟 数据规模 hive基本数据类 ...

最新文章

  1. 重构,还是重写?(2020版)
  2. Matlab练习:timer(定时器)
  3. Java笔试题库之编程题库 总共30道编程题,掌握了就可以应付中级以内Java面试题
  4. Linux 小知识翻译 - 「邮件服务器」
  5. vue传值到后端_Vue.js快速入门就从这儿开始特别是后端程序员
  6. 电视机芯片介绍-海思Hi3751 V600
  7. MySQL创建数据库、数据表 | 零基础自学SQL课程系列Day3
  8. 魔百和CM311-1a YST免拆机卡刷精简固件
  9. 第二课 SS7信令系统网络简介
  10. windows自动化操作——程序员必备
  11. python中tensorflow_Python Tensor FLow简单使用方法实例详解
  12. AtCoder - agc005_b(单调栈)
  13. STM32F103ZE单片机FSMC接口读取NAND Flash芯片K9F1G08U0E的数据时出现数据丢失的解决办法
  14. win10电脑字体突然变得模糊,很细
  15. 力扣 373. 查找和最小的K对数字
  16. Python----CSV 一般写入, 追加改模式w 为a
  17. 使用二进制方式安装高可用k8s
  18. android 坐标系 旋转,android IMU旋转矩阵横屏矫正(remapCoordinateSystem函数原理)
  19. Leaflet中的L.geoJSON一个坑
  20. 《Google 软件测试之道》摘录

热门文章

  1. 浪潮服务器安装文档,浪潮服务器系统安装.doc
  2. 修改列表ul li 圆点样式 自定义li前圆点样式
  3. 电脑坏了怎么把硬盘的mysql数据恢复_硬盘恢复数据技巧:硬盘坏了数据可以恢复吗?...
  4. 如何衡量一个算法的优劣?
  5. cocos2d-x下开发鞭炮效果
  6. Windows下卸载软件时提示 等待先前的卸载完成? 终止 dllhost.exe 进程
  7. Html实现歌曲歌词同步
  8. php 字符串转十六进制,PHP字符串怎么转十六进制
  9. 【期望】BZOJ4872 [SHOI2017] 分手是祝愿
  10. linux一运行大文件就自动重启,Linux之systemd服务配置及自动重启