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 ...
随机推荐
- OSX.PackageManager-Homebrew
How to install pip on mac? http://stackoverflow.com/questions/12092306/how-to-install-scipy-with-pip ...
- PCR技术
qRT-PCR是指先由RNA进行反转录生成cDNA,然后以cDNA为模板进行检测,检测的是该cDNA的含量,而cDNA由特定的RNA逆转录而来,所以间接地检测了RNA的含量. 基因表达: 转录:DNA ...
- BZOJ1079或洛谷2476 [SCOI2008]着色方案
一道记忆化搜索 BZOJ原题链接 洛谷原题链接 发现对于能涂木块数量一样的颜色在本质上是一样的,所以可以直接压在一个状态,而这题的数据很小,直接暴力开\(6\)维. 定义\(f[a][b][c][d] ...
- python imaplib无痕取信的主要
typ, data = M.fetch(num, (UID BODY.PEEK[]))
- Intellij IDEA 快捷键整理-鬼畜版(全键盘开发指南)
一 .何为鬼畜? 鬼畜一词在ACG爱好者中也代指通过影片(或音讯)剪辑,用频率极高的重复画面(或声音)组合而成的一段节奏配合音画同步率极高的一类影片,而这类鬼畜影片多见于NICONICO.AcFun和 ...
- 小话C源码移植
我们知道国外很多程序员工作在linux / unix 环境下,所以有很多优秀的c/c++语言代码不能直接在windows平台进行编译. 很多时候我们只能使用msys, cmake等工具进行模拟环境编译 ...
- Unix和Windows文件格式转化
可能的原因有: 1)执行权限的问题 解决方法: chmod +x ***.py 2)python版本的问题 解决方法:在执行时或者在py文件中选择好对应的Python的版本 3)python文件格式的 ...
- Can I win LT464
In the "100 game," two players take turns adding, to a running total, any integer from 1.. ...
- MySQLdb与sqlalchemy的简单封装
一:MySQLdb # !/usr/bin/python # -*- coding: UTF-8 -*- import MySQLdb import MySQLdb.cursors import co ...
- python之排列组合测试
# test permutations and combinations import itertools as it for i in it.combinations('abcd',2): prin ...