hive 动态分区与混合分区
hive的分区概念,相信大家都非常了解了。通过将数据放在hdfs不同的文件目录下,查表时,只扫描对应分区下的数据,避免了全表扫描。
提升了查询效率。
关于hive分区,我们还会用到多级分区、动态分区、混合分区,这些概念是什么含义,又该在何时使用呢?
静态分区
先说下静态分区。静态分区就是人为指定分区名。向分区插入数据的时候也要写明写入哪个分区。
我们给出建表,和插入数据的示例代码:
建表语句:
DROP TABLE IF EXISTS ods.employee; |
数据插入语句:
ALTER TABLE ods.employee DROP IF EXISTS PARTITION (`province`=${province},`city`=${city});
|
tips:
1.进行drop分区,是为了方便重跑。不去手动增加partition也是可以的。
2.写入时用overwrite也是为了方便使用脚本重跑。
2.province`=${province},`city`=${city} 是为了使用调度执行时,可以穿入不同的参数。避免重复的代码。
需要注意的是,
1.我们指定分区的那一列 dt 可以看做hive的伪列,虽然在select查询时,会展现在数据的最后,但不会真正出现在数据中。
2.dt也不应该出现在表的某一列名中,否则会报错。
动态分区
动态分区是相对静态分区的。
动态分区可以根据我们指定的某个字段的值,将数据动态写入对应的分区。
我们指定的字段中每有一个取值,就会生成一个分区。
建表语句示例:
create table ods.employee like ods.employee_tmp; |
tips:hive建表时,like关键字可以创建结构完全相同的表。
数据插入语句示例:
insert overwrite tableods.employee partition(province,city) |
hive 会根据最后两个列,决定数据最终写入哪个分区中。
混合分区
了解了静态分区与动态分区。让我们学习下混合分区。
假设这样一种情况,我们使用了动态分区,一张表的某个字段的值,决定了另一张表的分区,
如果由于存在脏数据,或人为指定字段错误,就会在另一张表产生茫茫多的分区。
hive的分区数据也是元数据的一部分,由hdfs的namenode管理,hive启动后,会缓存在内存中。
一级分区过多会影响集群性能。
为了避免这种情况,就该使用混合分区。
混合分区的概念并不复杂,就是混合了动态分区和静态分区。且静态分区应该放到动态分区的前面。
插入数据时,第一级分区写死,第二级分区使用静态分区。这样就有效控制了由于分区过多,
导致文件名过多,影响hdfs性能的问题。
建表语句示例和动态分区一样,只是在数据插入时会体现出混合分区。
那么,看下数据插入语句:
insert overwrite tableods.employee partition(province='zhejiang',city) |
代码的第一行体现了混合分区的用法。
多级分区
多级分区,其实我们在上面一直在使用。这里再提一下,
就是第一级分区下,增加第二级分区。对应hdfs就是嵌套的文件夹。
hive 动态分区与混合分区的更多相关文章
- hive动态分区和混合分区
各位看官,今天我们来讨论下再Hive中的动态分区和混合分区方面的一些知识点以及相关的一些问题. 前面我们已经讲过管理表和外部表的一般分区的一些知识点,对于需要对表创建很多的分区,那么用户就需要些很多的 ...
- Hive分区(静态分区+动态分区)
Hive分区的概念与传统关系型数据库分区不同. 传统数据库的分区方式:就oracle而言,分区独立存在于段里,里面存储真实的数据,在数据进行插入的时候自动分配分区. Hive的分区方式:由于Hive实 ...
- hive 动态分区实现 (hive-1.1.0)
笔者使用的hive版本是hive-1.1.0 hive-1.1.0动态分区的默认实现是只有map没有reduce,通过执行计划就可以看出来.(执行计划如下) insert overwrite tabl ...
- hive动态分区与静态分区
测试目的:1.分区表的动态分区与静态分区2.每层数据,数据流向,数据是否在每层都保留一份测试结果:1.动态分区/静态分区略2.每层表的数据都会保留,因此在生产上odm层的数据是可以删除的(不管是内表还 ...
- Hive动态分区和分桶(八)
Hive动态分区和分桶 1.Hive动态分区 1.hive的动态分区介绍 hive的静态分区需要用户在插入数据的时候必须手动指定hive的分区字段值,但是这样的话会导致用户的操作复杂度提高,而且在 ...
- Hive动态分区详解
目录 动态分区调整 注意 动态分区插入 动静分区结合 例子 动态分区调整 动态分区属性:设置为true表示开启动态分区功能(默认为false)hive.exec.dynamic.partition=t ...
- 什么是hive的静态分区和动态分区,它们又有什么区别呢?hive动态分区详解
面试官问我,什么是hive的静态分区和动态分区,这题我会呀. 简述 分区是hive存放数据的一种方式,将列值作为目录来存放数据,就是一个分区,可以有多列. 这样查询时使用分区列进行过滤,只需根据列值直 ...
- 曲演杂坛--重建索引后,还使用混合分区么?(Are mixed pages removed by an index rebuild?)
原文来自:http://www.sqlskills.com/blogs/paul/mixed-pages-removed-index-rebuild/ 在SQL SERVER 中,区是管理空间的基本单 ...
- windows动态磁盘导致的分区问题
上次说到由于装双系统导致我的win7启动不了了,一直以为是不是在ubuntu的安装界面点错了什么东西导致的,甚至认为是不是server的安装程序有点bug,直到今天继续折腾才发现了问题所在,跟ubun ...
随机推荐
- MFC窗口颜色的设置
本文主要介绍对话框背景色以及控件颜色的设置(SetDialogBkColor()不再被支持). 对话框背景色的设置 1.重载OnPaint()函数,即WM_PAINT消息,代码如下所示: void C ...
- 写一个简单的C词法分析器
写一个简单的C词法分析器 在写本文过程中,我参考了<词法分析器的实现>中的一些内容.这里我们主要讨论写一个C语言的词法分析器. 一.关键字 首先,C语言中关键字有: auto.break. ...
- Hotspot参数分析
-XX:+HeapDumpOnOutOfMemoryError 让虚拟机在出现内存溢出异常时Dump出当前的内存堆转储快照以便事后进行分析 -Xmx与-Xms 虚拟机堆参数 -Xoss 设置本地方法栈 ...
- [规则原则定理]规则原则定理章3Java命名规范
JAVA命名规范 驼峰法则: 将所有字母都小写(包括缩写),然后将单词的第一个字母大写. 每个单词的第一个字母都大写,来得到大驼峰式命名. 除了第一个单词,每个单词的第一个字母都大写,来得到(小)驼峰 ...
- jrebel
jrebel 编辑 JRebel是一套JavaEE开发工具.JRebel允许开发团队在有限的时间内完成更多的任务修正更多的问题,发布更高质量的软件产品. JRebel是收费软件,用户可以在JReb ...
- 销售vs技术岗,做技术的方法思考
销售甚至比技术岗位挣得还多,当然,做技术的比较好的拿到的自然也多. 我在想个问题,技术的天然优势是可以不断地积累,包括写code,写博客,做流程,完善流程,自动化流程,或者把某些工作流程化,自动化,托 ...
- JS高级- OOP-ES5
1. OOP 面向对象三大特点: 封装,继承,多态 封装: 问题: 构造函数可重用代码和结构定义,但无法节约内存 为什么: 放在构造函数内的方法定义,每new一次,都会反复创建副本——浪费内存 解决: ...
- 经典矩阵快速幂之二-----hdu2157(走k步到
题意:(中问题,题意很简单 思路:a走k步到b,其实就是A^k,ans.mat[a][b]就是答案. 其实就是离散的邻接矩阵那个P(不想证明,逃 #include<cstdio> #inc ...
- innodb_log_buffer_size和innodb_buffer_pool_size参数说明
innodb_log_buffer_size Command-Line Format --innodb_log_buffer_size=# System Variable Name innodb ...
- rails 查看项目的所有路由
rails routes