Hive-分区

一、概述

  • 内表:表结构和数据都交给hive来管理。
  • 外表:只将表结构交给hive来管理,删除表的时候hdfs上的数据还在。
  • 分区就是添加目录,提高查询效率。
  • 分为静态分区和动态分区。
  • 分区的字段不能在表的列中。
  • 添加分区时,必须在现有的分区的基础之上。
  • 内表删除分区的时候,会将hfds上的所有的数据都删除。
  • 外表删除分区的时候,只会删除hive中的结构,并不会删除hdfs上的数据。

二、静态分区

1、创建表并指定分区(PARTITIONED BY)

hive> CREATE TABLE psn (
    > id int,
    > name string,
    > likes array<string>,
    > address map<string,string>
    > )
    > PARTITIONED BY (age int, sex string)
    > ROW FORMAT DELIMITED
    > FIELDS TERMINATED BY ','
    > COLLECTION ITEMS TERMINATED BY '-'
    > MAP KEYS TERMINATED BY ':'
    > LINES TERMINATED BY '\n';

2、插入数据(age=10, sex='boy')跟创建表定义的分区类型一致

hive> LOAD DATA LOCAL INPATH '/data/test.log' INTO TABLE psn partition(age=10, sex='boy');
hive> LOAD DATA LOCAL INPATH '/data/test.log' INTO TABLE psn partition(age=20, sex='boy');

3、添加分区(新增加的分区里是没有内容的)

hive> ALTER TABLE psn ADD PARTITION(age=10, sex='man');
hive> ALTER TABLE psn ADD PARTITION(age=20, sex='man');

 4、删除分区

# 删除目录为:sex=man的目录
ALTER TABLE psn DROP PARTITION(sex='man');

# 删除目录(age=10)下的目录(sex=man)
ALTER TABLE psn DROP PARTITION(age=10,sex='man');

三、动态分区

1、设置参数:

 hive.exec.dynamici.partition=true;  #开启动态分区,默认是false
 set hive.exec.dynamic.partition.mode=nonstrict; #开启允许所有分区都是动态的,否则必须要有静态分区才能使用。

2、创建临时表

CREATE TABLE temp_hz_task_log2 (
    oid string,
    inputdate string,
    pno string,
    im15 string,
    url_tag string,
    uid string,
    at string,
    tc string,
    ac string
)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY '\001'
LINES TERMINATED BY '\n';

3、创建动态分区表(先按oid分区,再按inputdate分区)

CREATE TABLE hz_task_log2 (
    pno string,
    im15 string,
    url_tag string,
    uid string,
    at string,
    tc string,
    ac string
)
PARTITIONED BY (oid string, inputdate string)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY '\001'
LINES TERMINATED BY '\n';

4、将临时表(temp_hz_task_log2)插入到动态分区表(hz_task_log2),插入数据之后临时表可删除

# 查询字段需和hz_task_log2建表字段顺序一致,分区字段放在最后
insert overwrite table hz_task_log2 partition(oid,inputdate) 
select pno, im15, url_tag, uid, at, tc, ac, oid, inputdate from temp_hz_task_log2

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值