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 ...
随机推荐
- 在IP网络中,P、PE、CE代表意思
1.ce , pe属于mpls vpn里的概念.VPN概念中,把整个网络中的路由器分为三类:用户边缘路由器(CE).运营商边缘路由器(PE)和运营商骨干路由器(P):其中,PE充当IP VPN接入路由 ...
- Codeforces 782C. Andryusha and Colored Balloons 搜索
C. Andryusha and Colored Balloons time limit per test:2 seconds memory limit per test:256 megabytes ...
- 查看PHP代码执行的时间
$t1 = microtime(true); //...要执行的代码$t2 = microtime(true); echo '耗时'.round($t2-$t1,3).'秒';
- 繁体简体转化_langconv.py
from copy import deepcopyimport re try: import psyco psyco.full()except: pass try: from zh_wiki impo ...
- Koko Eating Bananas LT875
Koko loves to eat bananas. There are N piles of bananas, the i-th pile has piles[i] bananas. The g ...
- 编译https://github.com/CIR-KIT/steer_drive_ros时出现的问题
解决gazebo对应的protobuf版本问题: I've come across to the same problem. I'm using Ubuntu 16.04, ROS Kinetic a ...
- Python之入门篇1
一.安装python解释器 官网: https://www.python.org/downloads/windows/ 自行下载安装,添加环境变量 #测试安装是否成功 windows --> 运 ...
- 查看MySQL语句变量了多少行数据
explain MySQL语句 列如 explain SELECT * FROM 表名 WHERE id=1;
- Tomcat入门
1.JavaWeb概念 Java web,是用java技术来解决相关web互联网领域的技术的总称.web包括:web服务器和web客户端两部分.java在最早web客户端的应用有java applet ...
- myeclipse cannot connect to vm
启动tomcat时,tomcat可以直接运行,而debug时弹出 解决方法:打开360安全卫士的功能大全找到修复网络(LSP)点击立即修复就可以使用debug