分区是hive存放数据的一种方式。将列值作为目录来存放数据,就是一个分区。这样where中给出列值时,只需根据列值直接扫描对应目录下的数据,不扫面其他不关心的分区,快速定位,查询节省大量时间。分动态和静态分区两种

动态分区

1)不显示的给出分区名,根据列的取值自动建立对应分区(多少种取值,多少种分区),所以需要限制最大分区数:
SET hive.exec.dynamic.partition=true;
SET hive.exec.max.dynamic.partitions.pernode=1000;
SET hive.exec.max.dynamic.partitions=3000;
2)分区全部使用动态分区,还要设置为nonstrict模式,否则无法执行
set hive.exec.dynamic.partition.mode=nonstrict; 3)动态分区按位置来对应,跟名称无关。所以查询select中必须在最后字段按动态分区顺序给出对应字段
    insert overwrite table tb_pmp_raw_log_analysis_count partition (day='2016-05-17', media,type)
select advertiser_id,ad_plan_id,crt_id,hour,ad_place_id,city_bidrequest,device,network,os,category,channel,ad_type,rtb_type,price,count(1) as cnt,media, 1 as type
from (
select
split(all,'\\\\|~\\\\|')[41] as advertiser_id,
split(all,'\\\\|~\\\\|')[10] as ad_plan_id,
split(all,'\\\\|~\\\\|')[11] as crt_id,
substr(split(all,'\\\\|~\\\\|')[0],12,2) as hour,
case
when split(split(all,'\\\\|~\\\\|')[5],'/')[1] = 'wax' then split(all,'\\\\|~\\\\|')[17]
else split(all,'\\\\|~\\\\|')[7]
end as city_bidrequest,
NULL as device,
NULL as network,
NULL as os,
NULL as category,
NULL as channel,
NULL as ad_type,
NULL as rtb_type,
split(all,'\\|~\\|')[13] as price,
split(split(all,'\\\\|~\\\\|')[5],'/')[1] as media
from tb_pmp_raw_log_bid_tmp tb
) a
group by advertiser_id,ad_plan_id,crt_id,hour,ad_place_id,city_bidrequest,device,network,os,category,channel,ad_type,rtb_type,price,media
distribute by media;
注意:动态分区名称无关,顺序必须一致

4)distribute by 和动态分区原理一样,一般不一起用,如代码

5)动态分区与静态分区混用:
a) 只要有一个静态分区,就可以在默认的strict状态执行。如上代码,动静分区混用时,不用设置nonstrict状态。
b) 动态分区不能在静态分区前面,在select中按位置顺序出现在最后(因为静态分区提前产生,动态分区运行时产生,如果动态分区作为父路径,则子静态分区无法提前生成。会报错为动态分区不能为静态的父路径)。代码中,type设为静态,但media是动态,会报错,所以才在内部给定type的值。如果分区顺序改为day、type、media,则可以将day和type作为静态,media做动态。

Hive partition 导出时无名称:

存在分区partition的hive表,用select *返回包括分区字段值。
但select * >localdata.txt导入本地文件,无分区字段名称,但值记录存在。也就是说,文件中第一行的属性字段中无分区字段属性,而分区属性的取值在记录中存在。
如果要导入数据到mysql里,或用kettle读入时,记得要手动加上分区列对应的属性列名称

Hive partition 简介

在HiveSelect查询中一般会扫描整个表内容,会消耗很多时间做没必要的工作。有时候只需要扫描表中关心的一部分数据,因此引入了partition概念。建表时指定partition空间。一个Partition对应于表下的一个目录,所有的Partition的数据都存储在自己的目录。
总的说来partition就是辅助查询,缩小查询范围,加快数据的检索速度和对数据按照一定的规格和条件进行管理。

Partition的使用:

查看分区:show partitions hive_tb;
1、分区以字段形式在表结构中存在,通过describetable命令可以查看分区字段,但该字段不存放实际的数据内容,仅仅是分区的表示。
2、可有多个分区,每个分区以文件夹的形式单独存在表文件夹的目录下。
3、分区建表分为2种,一种是单分区,在表文件夹目录下只有一级文件夹目录。另外一种是多分区,表文件夹下多文件夹嵌套模
a、单分区建表语句:createtable day_table (id int, content string) partitioned by (dt string);单分区表,按天分区,在表结构中存在id,content,dt三列。
b、双分区建表语句:createtable day_hour_table (id int, content string) partitioned by (dt string, hourstring);双分区表,按天和小时分区,在表结构中新增加了dt和hour两列。

Hive partition基本语法:

1.创建分区表语法:
CREATE [EXTERNAL] TABLE [IF NOT EXISTS] table_name [(col_namedata_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]
双分区表,按天和小时分区,在表结构中新增加了dt和hour两列。
create table day_hour_table (id int, content string)partitioned by (dt string, hour string);
2.添加分区表语法(表已创建,在此基础上添加分区):
ALTERTABLE 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 ADDPARTITION)。当分区名是字符串时加引号。例:
ALTERTABLE day_table ADD PARTITION (dt='2008-08-08', hour='08') location'/path/pv1.txt' PARTITION (dt='2008-08-08', hour='09') location'/path/pv2.txt';
3.删除分区(ALTER TABLE table_name DROP partition_spec,partition_spec,…)分区的元数据和数据将被一并删除,例:
ALTERTABLE day_hour_table DROP PARTITION (dt='2008-08-08', hour='09');
4.分区表加载数据语法:
LOADDATA [LOCAL] INPATH 'filepath' [OVERWRITE] INTO TABLE tablename [PARTITION(partcol1=val1, partcol2=val2 ...)]

例:

LOADDATA INPATH '/user/pv.txt' INTO TABLE day_hour_table PARTITION(dt='2008-08-08', hour='08'); LOAD DATA local INPATH '/user/hua/*' INTO TABLE day_hourpartition(dt='2010-07- 07');
数据加载至表中,不会对数据进行任何转换。Load操作只是将数据复制至Hive表对应的位置。数据加载时自动在表下创建一个目录,文件存放在该分区下。
5.基于分区的查询的语句:
SELECTday_table.* FROM day_table WHERE day_table.dt>= '2008-08-08';
6. 查看分区:
show partitions 表名;
show partitions hive_tb; hive中partition的实际操作: hive>create table mp (a string) partitioned by (b string, c string);
hive> alter table mp add partition (b='1', c='1');
hive> alter table mp add partition (b='1', c='2');
hive> alter table mp add partition (b='2', c='2');
hive> show partitions mp ; b=1/c=1
b=1/c=2
b=2/c=2 hive>explain extended alter table mp drop partition (b='1'); ABSTRACTSYNTAX TREE:
(TOK_ALTERTABLE_DROPPARTS mp (TOK_PARTSPEC (TOK_PARTVAL b '1')))
STAGEDEPENDENCIES:
Stage-0 is a root stage
STAGEPLANS:
Stage: Stage-0
Drop Table Operator:
Drop Table
table: mp hive> alter table mp drop partition (b='1');
FAILED: Error in metadata: table is partitioned but partition spec is notspecified or tab: {b=1}
FAILED: Execution Error, return code 1 fromorg.apache.hadoop.hive.ql.exec.DDLTask
hive> show partitions mp ; b=1/c=1
b=1/c=2
b=2/c=2 hive>alter table mp add partition ( b='1', c = '3') partition ( b='1' , c='4');
hive> show partitions mp ;
b=1/c=1
b=1/c=2
b=1/c=3
b=1/c=4
b=2/c=2
b=2/c=3 hive>insertoverwrite table mp partition (b='1', c='1') select cnt from tmp_et3 ;
hive>altertable mp add columns (newcol string);
location指定目录结构:
alter table wizad_mdm_raw_hdfs add partition (day='2014-11-07',adn='3') location '/user/wizad/data/wizad/raw/2014-11-07/3_1/';
hive>alter table alter2 add partition (insertdate='2008-01-01') location'2008/01/01';
hive>alter table alter2 add partition (insertdate='2008-01-02') location'2008/01/02';

hive分区partition(动态和静态分区混合使用; partition的简介)的更多相关文章

  1. Partition:分区切换(Switch)

    在SQL Server中,对超级大表做数据归档,使用select和delete命令是十分耗费CPU时间和Disk空间的,SQL Server必须记录相应数量的事务日志,而使用switch操作归档分区表 ...

  2. 磁盘、分区及Linux文件系统 [Disk, Partition, Linux File System]

    1.磁盘基础知识 1.1 物理结构 硬盘的物理结构一般由磁头与碟片.电动机.主控芯片与排线等部件组成:当主电动机带动碟片旋转时,副电动机带动一组(磁头)到相对应的碟片上并确定读取正面还是反面的碟面,磁 ...

  3. DBA_Oracle Table Partition表分区概念汇总(概念)

    2014-06-20 Created By BaoXinjian

  4. kafka partition(分区)与 group

    kafka partition(分区)与 group   一. 1.原理图 2.原理描述 一个topic 可以配置几个partition,produce发送的消息分发到不同的partition中,co ...

  5. CAP理论中, P(partition tolerance, 分区容错性)的合理解释

    在CAP理论中, 对partition tolerance分区容错性的解释一般指的是分布式网络中部分网络不可用时, 系统依然正常对外提供服务, 而传统的系统设计中往往将这个放在最后一位. 这篇文章对这 ...

  6. SQL Server PARTITION FUNCTION(分区)

    分区并不影响Linq,sql查询 在MSSQL中,选中目标表,右键-存储-创建分区 根据提示完成分区,存储成sql 这里展示如何根据Id的数据范围分区 在执行前,可能需要设置日志文件大小为" ...

  7. hive动态分区和混合分区

    各位看官,今天我们来讨论下再Hive中的动态分区和混合分区方面的一些知识点以及相关的一些问题. 前面我们已经讲过管理表和外部表的一般分区的一些知识点,对于需要对表创建很多的分区,那么用户就需要些很多的 ...

  8. hive SQL 静态分区和 动态分区

    Hive 分区介绍: hive中简单介绍分区表(partition table),含动态分区(dynamic partition)与静态分区(static partition) hive中创建分区表没 ...

  9. 【转】Hive 基础之:分区、桶、Sort Merge Bucket Join

    Hive 已是目前业界最为通用.廉价的构建大数据时代数据仓库的解决方案了,虽然也有 Impala 等后起之秀,但目前从功能.稳定性等方面来说,Hive 的地位尚不可撼动. 其实这篇博文主要是想聊聊 S ...

随机推荐

  1. fedora27安装DB2 Express-C 11

    首先在官网下载对应的安装包和语言包两个文件. 然后通过tar -zxvf命令将下载的两个文件解压. 其中一个文件解压后是名为expc的文件,进入这个文件.里面有一个名为db2setup的文件. 在命令 ...

  2. Java动态代理模式浅析

    Java代理设计模式 - 静态代理 Java中的动态代理 - 调用处理器 代理设计模式的UML图: 我将首先介绍Java中的各种代理实现方法 Java代理设计模式 - 静态代理 这个例子非常简单,只有 ...

  3. [LeetCode] Max Consecutive Ones 最大连续1的个数

    Given a binary array, find the maximum number of consecutive 1s in this array. Example 1: Input: [1, ...

  4. kafka知识体系-kafka设计和原理分析-消息传递语义

    消息传递语义 消息传递保障 本节讨论Kafka如何确保消息在producer和consumer之间传输.有以下三种可能的传输保障(delivery guarantee): At most once: ...

  5. 机器学习基石:09 Linear Regression

    线性回归假设: 代价函数------均方误差: 最小化样本内代价函数: 只有满秩方阵才有逆矩阵. 线性回归算法流程: 线性回归算法是隐式迭代的. 线性回归算法泛化可能的保证: 根据矩阵的迹的性质:tr ...

  6. MYSQL存储过程中事务和DECLARE EXIT/CONTINUE HANDLER的使用

    -- 1.DECLARE EXIT HANDLER FOR SQLEXCEPTION 语句后面可以跟一个 begin end的复合语句块,也可以直接跟一个简单语句例如 :DECLARE EXIT HA ...

  7. Discuz利用UC_KEY进行前台getshell

    来源:http://wooyun.jozxing.cc/static/bugs/wooyun-2015-0137991.html 先通过uc_key把恶意代码保存在/uc_client/data/ca ...

  8. [NOIp 2017]宝藏

    Description 参与考古挖掘的小明得到了一份藏宝图,藏宝图上标出了 n 个深埋在地下的宝藏屋, 也给出了这 n 个宝藏屋之间可供开发的 m 条道路和它们的长度. 小明决心亲自前往挖掘所有宝藏屋 ...

  9. [BZOJ]4810: [Ynoi2017]由乃的玉米田

    Time Limit: 30 Sec  Memory Limit: 256 MB Description 由乃在自己的农田边散步,她突然发现田里的一排玉米非常的不美.这排玉米一共有N株,它们的高度参差 ...

  10. hdu 5445 多重背包

    Food Problem Time Limit: 3000/2000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others)To ...