好程序员大数据培训分享Hive的静态分区与动态分区-阿里云开发者社区

开发者社区> 好程序员> 正文

好程序员大数据培训分享Hive的静态分区与动态分区

简介:
+关注继续查看

  好程序员大数据培训分享Hive的静态分区与动态分区:分区是hive存放数据的一种方式。将列值作为目录来存放数据,就是一个分区。这样查询时使用分区列进行过滤,只需根据列值直接扫描对应目录下的数据,不扫描其他不关心的分区,快速定位,提高查询效率。分动态和静态分区两种:
  1. 静态分区:若分区的值是确定的,那么称为静态分区。新增分区或者是加载分区数据时,已经指定分区名。
  create table if not exists day_part1(
  uid int,
  uname string
  )
  partitioned by(year int,month int)
  row format delimited fields terminated by 't';
  ##加载数据指定分区
  load data local inpath '/root/Desktop/student.txt' into table day_part1
partition(year=2017,month=04);
  ##新增分区指定分区名
  alter table day_part1 add partition(year=2017,month=1)
partition(year=2016,month=12);
  2. 动态分区:分区的值是非确定的,由输入数据来确定
  2.1 动态分区的相关属性:
  hive.exec.dynamic.partition=true :是否允许动态分区
  hive.exec.dynamic.partition.mode=strict :分区模式设置
  strict:最少需要有一个是静态分区
  nostrict:可以全部是动态分区
  hive.exec.max.dynamic.partitions=1000 :允许动态分区的最大数量
  hive.exec.max.dynamic.partitions.pernode =100
:单个节点上的mapper/reducer允许创建的最大分区
  2.2 动态分区的操作
  ##创建临时表
  create table if not exists tmp
  (uid int,
  commentid bigint,
  recommentid bigint,
  year int,
  month int,
  day int)
  row format delimited fields terminated by 't';
  ##加载数据
  load data local inpath '/root/Desktop/comm' into table tmp;
  ##创建动态分区表
  create table if not exists dyp1
  (uid int,
  commentid bigint,
  recommentid bigint)
  partitioned by(year int,month int,day int)
  row format delimited fields terminated by 't';
  ##严格模式
  insert into table dyp1 partition(year=2016,month,day)
  select uid,commentid,recommentid,month,day from tmp;
  ##非严格模式
  ##设置非严格模式动态分区
  set hive.exec.dynamic.partition.mode=nostrict;
  ##创建动态分区表
  create table if not exists dyp2
  (uid int,
  commentid bigint,
  recommentid bigint)
  partitioned by(year int,month int,day int)
  row format delimited fields terminated by 't';
  ##为非严格模式动态分区加载数据
  insert into table dyp2 partition(year,month,day)
  select uid,commentid,recommentid,year,month,day from tmp;
  3.分区注意细节
  (1)、尽量不要用动态分区,因为动态分区的时候,将会为每一个分区分配reducer数量,当分区数量多的时候,reducer数量将会增加,对服务器是一种灾难。
  (2)、动态分区和静态分区的区别,静态分区不管有没有数据都将会创建该分区,动态分区是有结果集将创建,否则不创建。
  (3)、hive动态分区的严格模式和hive提供的hive.mapred.mode的严格模式。
  hive提供我们一个严格模式:为了阻止用户不小心提交恶意hql
  hive.mapred.mode=nostrict : strict
  如果该模式值为strict,将会阻止以下三种查询:
  (1)、对分区表查询,where中过滤字段不是分区字段。
  (2)、笛卡尔积join查询,join查询语句,不带on条件或者where条件。
  (3)、对order by查询,有order by的查询不带limit语句。

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
hive中的表、外部表、分区和桶的理解
一、概念介绍         Hive 没有专门的数据存储格式,也没有为数据建立索引,用户可以非常自由的组织 Hive 中的表,只需要在创建表的时候告诉 Hive 数据中的列分隔符和行分隔符,Hive 就可以解析数据         Hive 中的 Table 和数据库中的 Table 在概念上是类似的,每一个 Table 在 Hive 中都有一个相应的目录存储数据。
1391 0
解密阿里数据中台女程序员聆一、萨若代码诗!
2018年已过,我们迎来了新的一年,在机遇与挑战同在的环境下,我们更应勤于学习。为了方便大家学习,小编为大家盘点了2018年数据技术及产品部云栖号最火的干货文章分享给大家,让我们在新的一年里共同学习和成长! 数据中台 云栖号简介: 数据中台的概念由阿里巴巴首次提出,它是一个承接技术,引领业务,构建规范定义的、全域可连接萃取的、智慧的数据处理平台,建设目标是为了高效满足前台数据分析和应用的需求。
10056 0
好程序员web前端教程分享3种方法实现CSS隐藏滚动条并可以滚动内容
好程序员web前端教程分享3种方法实现CSS隐藏滚动条并可以滚动内容,隐藏滚动条的同时还需要支持滚动,我们经常在前端开发中遇到这种情况,最容易想到的是加一个iscroll插件,但其实现在CSS也可以实现这个功能,我已经在很多地方使用了,下面一起看看这三种方法。
1292 0
解密阿里中间件女程序员以夕、钰佩代码诗!
2018年已过,我们迎来了新的一年,在机遇与挑战同在的环境下,我们更应勤于学习。为了方便大家学习,小编为大家盘点了2018年中间件云栖号最火的干货文章分享给大家,让我们在新的一年里共同学习和成长! 阿里中间件团队 云栖号简介: 中间件(middleware)是基础软件的一大类,属于可复用软件的范畴。
4229 0
Hive分区、分桶操作及其比较(转自:http://blog.csdn.net/epitomizelu/article/details/41911657)
1,Hive分区。      是指按照数据表的某列或某些列分为多个区,区从形式上可以理解为文件夹,比如我们要收集某个大型网站的日志数据,一个网站每天的日志数据存在同一张表上,由于每天会生成大量的日志,导致数据表的内容巨大,在查询时进行全表扫描耗费的资源非常多。那其实这个情况下,我们可以按照日期对数据表进行分区,不同日期的数据存放在不同的分区,在查询时只要指定分区字段的值就可以直接从该分区查找。
2883 0
好程序员web前端技术分享移动端页面布局
好程序员web前端技术分享移动端页面布局一、弹性布局(100%布局)的特点顶部与底部的bar不管分辨率怎么变,它的⾼度和位置都不变; 中间每条招聘信息不管分辨率怎么变,招聘公司的图标等信息 都位于条目的左边,薪资都位于右边.特点:关键元素高宽和位置都不变,只有容器元素在做伸缩变换。
1270 0
【转】如何在Windows+VS2005使用最新静态libcurl 7.35.0获取网页数据,支持HTTPS
地址: http://blog.csdn.net/hujkay作者:Jekkay Hu(34538980@qq.com)关键词:Windows,curl,ssl,  visual c++ 2005, libcurl, https,网页抓取时间: 2014/2/18 1.
832 0
+关注
333
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
《2021云上架构与运维峰会演讲合集》
立即下载
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载