hive与mysql的数据分区的异同
2019独角兽企业重金招聘Python工程师标准>>>
数据分区是什么?
数据库分区是一种物理数据库设计技术,DBA和数据库建模人员对其相当熟悉。
分区把一大块数据分成了n小块,这样查询的时候很快定位到某一小块上,在小块中寻址要快很多;
多大的数据量才需要分区?
参考标准,如果一张表的记录超过在超过1000w,并以每月百万的数据量增长,那需要分区。
为什么需要数据分区?
性能提升;方便管理;避免数据倾斜
改善数据库的结构有两种,一种是采用存储过程代替普通的SQL语句,
另外一种就是使用数据库系统中增强索引和规划分区表进行优化,
数据分区主要目的是为了在特定的SQL操作中减少数据读写的总量以缩减响应时间。
有几种常见的数据分区?各自的优缺点 (基于mysql)
行分区 ----按日期的分区
列分区--- 参数值个数比较少 国际化按国家的分区
range分区:行数据基于属于一个给定连续区间的列值被放入分区,mysql5.5开始支持range columns的分区。
list分区:分区面向的是离散的值,mysql5.5支持list columns。
hash分区:根据用户自定义的表达式的返回值来进行分区,返回值不能为负数。
key分区:根据MYSQL数据库提供的哈希函数来进行分区。
谨记:无论使用何种类型的分区,分区总是在创建时就自动的顺序编号,且从0开始记录;
只有RANGE和LIST支持子分区,但是子分区内只能使用HASH和KEY分区。
5.hive分区
因为分区列的值要转化为文件夹的存储路径,
在表的数据文件中实际上并不保存分区列的信息与数据。
数据是根据文件夹的名字读取来的,而不是实际从数据文件中读取来的。
一般向分区表中插入数据时系统会校验数据是否符合该分区,如果不符合会报错。
而在hive中,向某个分区中插入什么样的数据完全是由人来控制的。
动态分区可以根据查询得到的数据自动匹配到相应的分区中去。
先设置hive.exec.dynamic.partition参数值为true,默认值为false,即不允许使用:
如果源数据对应的province子分区不存在,则会自动创建,非常方便,
而且避免了人工控制插入数据与分区的映射关系存在的潜在风险。
为了让分区列的值相同的数据尽量在同一个mapreduce中,
这样每一个mapreduce可以尽量少的产生新的文件夹,
可以借助distribute by的功能,将分区列值相同的数据放到一起.
附distributed by
ditribute by是控制map的输出在reducer是如何划分的,举个例子,我们有一张表,mid是指这个store所属的商户,money是这个商户的盈利,name是这个store的名字
store:
midmoneyname
AA15.0商店1
AA20.0商店2
BB22.0商店3
CC44.0商店4
执行hive语句:
select mid, money, name from store distribute by mid sort by mid asc, money asc
我们所有的mid相同的数据会被送到同一个reducer去处理,这就是因为指定了distribute by mid,这样的话就可以统计出每个商户中各个商店盈利的排序了(这个肯定是全局有序的,因为相同的商户会放到同一个reducer去处理)。这里需要注意的是distribute by必须要写在sort by之前。
转载于:https://my.oschina.net/u/1782622/blog/391853
hive与mysql的数据分区的异同相关推荐
- mysql distribute by_hive与mysql的数据分区的异同
数据分区是什么? 数据库分区是一种物理数据库设计技术,DBA和数据库建模人员对其相当熟悉. 分区把一大块数据分成了n小块,这样查询的时候很快定位到某一小块上,在小块中寻址要快很多; 多大的数据量才需要 ...
- hive向mysql导数据_Mysql Hive 导入导出数据
---王燕行转列sql select split(concat_ws(',',collect_set(cast(smzq as string))),',')[1] ,split(concat_ws(' ...
- mysql百万数据分区_mysql百万数据实践-分区
今天实践下mysql百万级数据分区的影响,首先是产生百万级别的数据量 //创建带分区的数据表 CREATE TABLE `part_person` ( `id` bigint(20) unsigned ...
- hadoop php mysql_PHP+Hadoop+Hive+Thrift+Mysql实现数据统计分析
转存 Flume监听文件目录,将数据传输到能访问Hdfs集群的服务器上,这里传输到了224机器的7000端口 #agent3表示代理名称 login agent3.sources=source1 ag ...
- HIVE的安装配置、mysql的安装、hive创建表、创建分区、修改表等内容、hive beeline使用、HIVE的四种数据导入方式、使用Java代码执行hive的sql命令
1.上传tar包 这里我上传的是apache-hive-1.2.1-bin.tar.gz 2.解压 mkdir -p /home/tuzq/software/hive/ tar -zxvf apach ...
- 【Sqoop】从MySQL同步数据到Hive的操作参数解析
参数解析: 必选参数 --connect :连接的mysql数据库的jdbc信息 --username:mysql数据库的登录账户 --password:mysql数据库的登录密码 --table: ...
- 一文搞定hive之insert into 和 insert overwrite与数据分区
版权声明:本文为博主原创文章,未经博主允许不得转载. 数据分区 数据库分区的主要目的是为了在特定的SQL操作中减少数据读写的总量以缩减响应时间,主要包括两种分区形式:水平分区与垂直分区.水平分区是对表 ...
- 基于Hadoop的豆瓣电影的数据抓取、数据清洗、大数据分析(hdfs、flume、hive、mysql等)、大屏可视化
目录 项目介绍 研究背景 国内外研究现状分析 研究目的 研究意义 研究总体设计 数据获取 网络爬虫介绍 豆瓣电影数据的采集 数据预处理 数据导入及环境配置 Flume介绍 Hive介绍 MySQL介绍 ...
- Sqoop MySQL hive 数据库导入导出数据
1.导入(从mysql导入hive) 场景:从一个mysql数据库的表中导入数据到hive表中 sqoop import \ --connect "jdbc:mysql://ip:3306/ ...
- 大数据-案例-离线数仓-在线教育:MySQL(业务数据)-ETL(Sqoop)->Hive数仓【ODS层-数据清洗->DW层(DWD-统计分析->DWS)】-导出(Sqoop)->MySQL->可视化
一.商业BI系统概述 商业智能系统,通常简称为商业智能系统,是商业智能软件的简称,是为提高企业经营绩效而采用的一系列方法.技术和软件的总和.通常被理解为将企业中的现有数据转换为知识并帮助企业做出明智的 ...
最新文章
- 计算机应用基础学期教学小结,《计算机应用基础》的教学总结及小结.docx
- 如何用python最快的获取大文件的最后几行
- python对初学者的看法_python学习之道(1)——新手小白对print()函数的理解,Python,之路,一,浅谈...
- python中的tkinter_基于python中tkinter的计算机实现
- JAVA学习之旅番外篇
- 关于使用类成员函数作为回调的方法
- Mysql高可用设计入门
- Strtus2标签s:url
- 【Modbus】 RTU CRC校验码计算方法
- Hadoop上传和下载大存储的HIVE表
- 运用matlab求公式 的主析取范式与主合取范式,并求公式的成真赋值和成假赋值。
- Dukto-R6超级实用的免费跨平台局域网文件/文件夹传输工具
- 1寸、小2寸、2寸证件照片是多大尺寸?
- Scratch软件安装的详细步骤
- 风暴数码论坛教程--开机动画、声音的替换、位置变更及DATA文件夹的使用
- 【常用办公软件】万彩办公大师教程丨全能图片转换工具
- 计算机毕业设计HTML+CSS+JavaScript仿大型购物商城(1页)
- 林群、张景中院士近年来致力于微积分局部公理化,此路不通
- PHP人才匮乏,月入万元不是梦
- 图灵机器人接口实现自动回复(web版)