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 ...
随机推荐
- 用vs2015 编译 web app ionic
1.要下载https://git-for-windows.github.io/ 2.下载ionic模版
- Luogu 1764 翻转游戏 - 枚举 + 搜索
题目描述 kkke在一个n*n的棋盘上进行一个翻转游戏.棋盘的每个格子上都放有一个棋子,每个棋子有2个面,一面是黑色的,另一面是白色的.初始的时候,棋盘上的棋子有的黑色向上,有的白色向上.现在kkke ...
- 小话C源码移植
我们知道国外很多程序员工作在linux / unix 环境下,所以有很多优秀的c/c++语言代码不能直接在windows平台进行编译. 很多时候我们只能使用msys, cmake等工具进行模拟环境编译 ...
- How-to Install VMware Tools on Debian Stretch 9 32/64bit Linux+GNU
在虚拟机VMWARE上安装debian9 安装vmwaretools时候遇到问题 询问我IFCONFIG安装在哪里? 新版的debian不知道是用户权限问题还是使用了其他网络配置工具 vmwareto ...
- socket的同步异步的性能差别,以及listen的参数backlog
先说listen的参数backlog,同步系统中分别设置为5,512,1024的跑分情况 跑分工具apache的ab,参数为:ab -n50000 -c300 backlog=5跑分结果 Reques ...
- The Django Book第六章(Admin)随笔
要使用Django自带的管理界面,首先得激活- 激活的前提首先在你的项目的seeting目录下的INSTALL_APPS必须有以下的的包 django.contrib.admin django.con ...
- HDU 6129 Just do it
题意:给你一个包含n个数的序列A和一个数m,序列B中的数是序列A经过异或得到的,比如:b[i]=a[1]^a[2]^…..^a[i].现在让你求经过m次异或后,序列B的值. 思路:这题其实和杨辉三角 ...
- css的基础用法之标签选择
一.css的4种引入方式 #.内联式 <p style="color: red;font-size: 50px;text-align: center">Egon是一个非 ...
- python学习 day5 (3月6日)
字典映射,{}键值对,key 唯一的 ,可哈希,容器型数据类型 可变的(不可哈希): 字典 列表 集合 都不可做键 不可变的(可哈希): 数字 字符串 bool 元组 frozeset() 可以做键 ...
- 783. Minimum Distance Between BST Node
方法一,非递归方法,中序遍历 /** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *l ...