博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
hive分区
阅读量:6040 次
发布时间:2019-06-20

本文共 2727 字,大约阅读时间需要 9 分钟。

hot3.png

  • hive为啥分区?

hive为了避免全表扫描,从而引进分区技术来将数据进行划分。减少不必要数据的扫描,从而提高效率。

  • hive的分区和MySQL的分区的区别?

mysql分区字段用的是表内字段;而hive分区字段采用表外字段。

  • hive的分区技术
  1. hive的分区字段是一个伪字段,但我们可以使用来进行操作
  2. 分区可以是表分区也可以是分区的分区,可以有多个分区
  • 分区的关键字

partitioned by {字段 类型}

  • 分区的本质是在表的目录或者是分区的目录下在创建目录,分区的目录名为指定字段=值

例如:

  • 一级分区
create table if not exists u1(id int,name string,age int)partitioned by(dt string)      //分区字段row format delimited fields terminated by ' '   //列分隔符stored as textfile;   存储类型
// 文件加载到分区表load data local inpath '/home/u1' into table u1 partition(dt="2018-10-14");load data local inpath '/home/u115' into table u1 partition(dt="2018-10-15");
  • 二级分区
create table if not exists u2(id int,name string,age int)partitioned by(month int,day int)row format delimited fields terminated by ' 'stored as textfile;
// 文件加载到分区表load data local inpath '/home/u1914' into table u2 partition(month=9,day=14);load data local inpath '/home/u1915' into table u2 partition(month=9,day=15);load data local inpath '/home/u11014' into table u2 partition(month=10,day=14);load data local inpath '/home/u11015' into table u2 partition(month=10,day=15);
  • 查询分区:

show partitions {tableName};

  • 增加分区:
alter table u1 add partition(dt="2018-10-16");   // 一级分区alter table u1 add partition(dt="2018-10-16") partition(dt="2018-10-17");  //二级分区alter table u1 add partition(dt="2018-10-19") location "/user/hive/warehouse/gp1801.db/u1/dt=2018-10-16/";  //增加分区并指定数据文件路径
  • 修改分区(手动修改元数据信息)

alter table u1 partition(dt="2018-10-16") rename to partition(dt="2018-10-26");

  • 修改已存在分区的路径:

alter table u1 partition(dt="2018-10-19") set location "hdfs://qianfeng/user/hive/warehouse/gp1801.db/u1/dt=2018-10-14/"; //务必要写成绝对路径

  • 删除分区
alter table u1 drop partition(dt="2018-10-27");   //删除一级分区alter table u1 drop partition(dt="2018-10-26"),partition(dt="2018-10-19");  //删除二级分区
  • hvie的动态分区
hive.exec.dynamic.partition=true;  //是否允许动态分区hive.exec.dynamic.partition.mode=strict/nostrict; //动态区模式为严格模式hive.exec.max.dynamic.partitions=1000;  //允许最大的动态分区hive.exec.max.dynamic.partitions.pernode=100; //单个节点允许最大分区
strict:严格模式,最少需要一个静态分区列(指定固定值)nostrict:非严格模式,允许所有的分区字段都为动态。
  • hive的静态分区:分区数据已知
  • hive的动态分区:分区数据未知(不知道有多少个分区)
  • hive的混合分区:有动态有静态
  • 动态分区
create table if not exists u3(id int,name string,age int)partitioned by(month int,day int)row format delimited fields terminated by ' 'stored as textfile;将u2表中的数据加载到u3中:from u2insert into table u3 partition(month,day)select id,name,age,month,day;
  • 混合分区:
create table if not exists u4(id int,name string,age int)partitioned by(month int,day int)row format delimited fields terminated by ' 'stored as textfile;from u2insert into table u4 partition(month=9,day)select id,name,age,daywhere month=9;
  • hive的mr的执行模式

hive.mapred.mode=strict/nostrict; //严格模式/非严格模式

转载于:https://my.oschina.net/yulang/blog/2247174

你可能感兴趣的文章
经典算法题每日演练——第二题 五家共井
查看>>
存储过程中拼接的变量和点的问题
查看>>
ASP.NET那点不为人知的事(一)
查看>>
HTML 表格
查看>>
VMware 虚拟化编程(7) — VixDiskLib 虚拟磁盘库详解之三
查看>>
php 未实例化类调用方法的问题
查看>>
我对读计算机软件专业硕士的几点看法
查看>>
用JS写CSS
查看>>
TOJ4537: n阶行列式
查看>>
3.16
查看>>
表单文件上传与文件下载
查看>>
下午考
查看>>
创建字符设备的三种方法
查看>>
走在网页游戏开发的路上(六)
查看>>
nginx 配置的server_name参数(转)
查看>>
Uva592 Island of Logic
查看>>
C++基础代码--20余种数据结构和算法的实现
查看>>
footer固定在页面底部的实现方法总结
查看>>
nginx上传文件大小
查看>>
HDU 2243 考研路茫茫——单词情结(自动机)
查看>>