58-66-hive-数据类型-分区-分桶

news2024/11/24 19:00:08

58-hive-数据类型-分区:

分区表(将数据分开放,理解市区,指定分区更快,避免全数据扫描,提高查询效率,对hive的一种优化)

分区表实际是对应一个 HDFS 文件系统上的独立的文件夹,该文件夹下是该分区所有的数据文件。Hive 中的分区就是分目录,把一个大的数据集根据业务需要分割成小的数据集。在查询时通过 WHERE 子句中指定分区,提高查询效率。

create table dept_partition(deptno int,dname string,loc string) partitioned by (day string) row format delimited fields terminated by ‘\t’;

准备数据
#dept_20200401.log
10 	ACCOUNTING 	1700
20 	RESEARCH 	1800
#dept_20200402.log
30 	SALES 	1900
40 	OPERATIONS 	1700
#dept_20200403.log
50 	TEST 	2000
60 	DEV 	1900

建表时添加分区
create table dept_partition(deptno int,dname string,loc string) partitioned by (day string) row format delimited fields terminated by '\t';

加载数据(修改1,2,3)
load data local inpath '/opt/module/hive/datas/dept_20200401.log' into table dept_partition partition(day='20200401');

查询
select * from dept_partition where day='20200401';

在这里插入图片描述

增加分区

创建单个分区
hive (default)> alter table dept_partition add partition(day='20200404');
同时创建多个分区
hive (default)> alter table dept_partition add partition(day='20200405') partition(day='20200406');

删除分区

删除单个分区
hive (default)> alter table dept_partition drop partition (day='20200406');
同时删除多个分区
hive (default)> alter table dept_partition drop partition (day='20200404'),partition(day='20200405');

二级分区(两级目录)

创建
create table dept_partition2(deptno int, dname string, loc string) partitioned by (day string, hour string) row format delimited fields terminated by '\t';
加载数据到二级分区(修改1,2,3,hour12,13,14)
load data local inpath '/opt/module/hive/datas/dept_20200401.log' into table dept_partition2 partition(day='20200401',hour='12');

在这里插入图片描述

把数据直接上传到分区目录上,让分区表和数据产生关联的三种方式

(1)方式一:上传数据后修复,直接mkdir不会再元数据分区表中增加相关信息

hive (default)> dfs -mkdir -p /hive_db/dept_partition2/day=20200401/hour=13;
hive (default)> dfs -put /opt/module/datas/dept_20200401.log /hive_db/dept_partition2/day=20200401/hour=13;
修复
msck repair table dept_partition2;

(2)方式二:上传数据后添加分区

hive (default)> dfs -mkdir -p /hive_db/dept_partition2/day=20200401/hour=14;
hive (default)> dfs -put /opt/module/hive/datas/dept_20200401.log /hive_db/dept_partition2/day=20200401/hour=14;
执行添加分区
hive (default)> alter table dept_partition2 add partition(day='20200401',hour='14');

(3)方式三:创建文件夹后 load 数据到分区,会直接在元数据中添加分区信息

创建目录
hive (default)> dfs -mkdir -p /hive_db/dept_partition2/day=20200401/hour=15;上传数据
hive (default)> load data local inpath '/opt/module/hive/datas/dept_20200401.log' into table
dept_partition2 partition(day='20200401',hour='15');

load如果不指定分区信息,会有个默认的。了解即可。

load data local inpath ‘/opt/module/hive/datas/dept.txt’ into table dept_partition;

在这里插入图片描述

动态分区调整

关系型数据库中,对分区表 Insert 数据时候,数据库自动会根据分区字段的值,将数据插入到相应的分区中,Hive 中也提供了类似的机制,即动态分区(Dynamic Partition),只不过,使用 Hive 的动态分区,需要进行相应的配置。

1)开启动态分区参数设置

(1)开启动态分区功能(默认 true,开启) 
hive.exec.dynamic.partition=true
(2)设置为非严格模式(动态分区的模式,默认 strict,表示必须指定至少一个分区为
静态分区,nonstrict 模式表示允许所有的分区字段都可以使用动态分区。)
hive.exec.dynamic.partition.mode=nonstrict
(3)在所有执行 MR 的节点上,最大一共可以创建多少个动态分区。默认 1000
hive.exec.max.dynamic.partitions=1000
(4)在每个执行 MR 的节点上,最大可以创建多少个动态分区。该参数需要根据实际的数据来设定。比如:源数据中包含了一年的数据,即 day 字段有 365 个值,那么该参数就需要设置成大于 365,如果使用默认值 100,则会报错。hive.exec.max.dynamic.partitions.pernode=100
(5)整个 MR Job 中,最大可以创建多少个 HDFS 文件。默认 100000
hive.exec.max.created.files=100000
(6)当有空分区生成时,是否抛出异常。一般不需要设置。默认 false
hive.error.on.empty.partition=false

2)案例

需求:将 dept 表中的数据按照地区(loc 字段),插入到目标表 dept_partition 的相应分区中。

(1)创建目标分区表

hive (default)> create table dept_partition_dy(id int, name string) partitioned by (loc int) row format delimited fields terminated by ‘\t’;

(2)设置动态分区(分区信息是查询中的最后一个,loc的位置)

set hive.exec.dynamic.partition.mode = nonstrict;

hive (default)> insert into table dept_partition_dy partition(loc) select deptno, dname, loc from dept;

(3)查看目标分区表的分区情况

hive (default)> show partitions dept_partition;

分桶表(了解,分区表是分目录,分桶表是将数据分开)

分区提供一个隔离数据和优化查询的便利方式。不过,并非所有的数据集都可形成合理的分区。对于一张表或者分区,Hive 可以进一步组织成桶,也就是更为细粒度的数据范围划分。分桶是将数据集分解成更容易管理的若干部分的另一个技术。分区针对的是数据的存储路径;分桶针对的是数据文件。

#创建
create table stu_buck(id int, name string) clustered by(id) into 4 buckets	row format delimited fields terminated by '\t';
#查看表结构
desc fromatted stu_buck;
#导入数据,注意是不是local还是hdfs路径
load data local inpath '/opt/module/hive/datas/student.txt' into table stu_buck;

分桶规则:
根据结果可知:Hive 的分桶采用对分桶字段的值进行哈希,然后除以桶的个数求余的方
式决定该条记录存放在哪个桶当中

#使用insert方式将数据导入分桶表
hive(default)>insert into table stu_buck select * from student;

在这里插入图片描述

抽样查询

对于非常大的数据集,有时用户需要使用的是一个具有代表性的查询结果而不是全部结果。Hive 可以通过对表进行抽样来满足这个需求。语法: TABLESAMPLE(BUCKET x OUT OF y)

查询表 stu_buck 中的数据。

hive (default)> select * from stu_buck tablesample(bucket 1 out of 4 on id);

注意:x 的值必须小于等于 y 的值,否则

ve 可以通过对表进行抽样来满足这个需求。语法: TABLESAMPLE(BUCKET x OUT OF y)

查询表 stu_buck 中的数据。

hive (default)> select * from stu_buck tablesample(bucket 1 out of 4 on id);

注意:x 的值必须小于等于 y 的值,否则

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/58245.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

回归预测 | MATLAB实现基于RF随机森林的工业增加值预测(多因素、多指标)

回归预测 | MATLAB实现基于RF随机森林的工业增加值预测(多因素、多指标) 目录 回归预测 | MATLAB实现基于RF随机森林的工业增加值预测(多因素、多指标)预测效果基本介绍程序设计拓展学习参考资料预测效果 基本介绍<

Raspberry Pi 4B树莓派学习笔记

这两天在学习Raspberry Pi 4B树莓派&#xff0c;这篇笔记就梳理一下目前学习到的一些知识&#xff0c;加强自己的记忆&#xff0c;整理一下思路&#xff0c;也希望能给大家带来帮助&#xff01;感兴趣的小伙伴欢迎评论区留言或者私信博主&#xff01; 目录 一、什么是树莓派 …

C/C++_IO缓存问题

平常在练习的时候&#xff0c;总是忽略IO的缓存&#xff0c;这篇笔记记录下C和C的缓存问题。 1 什么是缓存 缓存就是程序在内存中开辟的用来存放数据的空间&#xff0c;之所以叫缓存是因为这个变量时用来暂存数据用的。比如下面的语句&#xff0c; int a ; int *p malloc(…

2023最新SSM计算机毕业设计选题大全(附源码+LW)之java高考信息发布平台cnj61

最近大四学弟学妹们开始准备设计了&#xff0c;有一些问题问我&#xff0c;比如设计怎么做&#xff0c;有没有模板等等吧&#xff0c;大家都没有去学校&#xff0c;老师都是通过远程指导的&#xff0c;答辩也是远程答辩&#xff0c;这种情况下同学们不在一起&#xff0c;可能碰…

PPT素材、PPT模板免费下载

想要PPT模板、PPT素材、PPT图表、PPT教程等相关素材&#xff0c;一定要知道这几个网站&#xff0c;不仅能免费下载&#xff0c;质量还非常高&#xff0c;话不多说&#xff0c;直接上内容。1、菜鸟图库 https://www.sucai999.com/search/ppt/0_0_%E6%9E%81%E7%AE%80_0.html?vNT…

译码器的电路

译码器与编码器正好是相反的操作&#xff0c;编码器是把高低电平转换成二进制信号 译码是把二进制编码转换成高低电平输出 译码器的逻辑功能是将每一个对应的二进制编码转化成高低电平或者另一种信号&#xff0c;是编码的另一种逆向的操作&#xff0c;编码器有二进制&#xf…

【专栏】核心篇07| Redis “jio”美的集群模式

关注公众号 【离心计划】呀&#xff0c;一起逃离地球表面 Redis专栏合集 【专栏】01| Redis夜的第一章 【专栏】基础篇02| Redis 旁路缓存的价值 【专栏】基础篇03| Redis 花样的数据结构 【专栏】基础篇04| Redis 该怎么保证数据不丢失&#xff08;上&#xff09; 【专…

Tableau:详细表达式(LOD表达式)的计算过程

写在最前 很早以前写过一篇关于Tableau详细级别表达式的博客&#xff0c;具体可以参考https://blog.csdn.net/yeshang_lady/article/details/104945361。前序博客重点在于介绍三种详细级表达式&#xff0c;这篇博客主要介绍使用详细级别表达式时的注意事项。 1 LOD表达式与非聚…

毕业设计-深度学习的施工安全帽图像检测算法

目录 前言 课题背景和意义 实现技术思路 实现效果图样例 前言 &#x1f4c5;大四是整个大学期间最忙碌的时光,一边要忙着备考或实习为毕业后面临的就业升学做准备,一边要为毕业设计耗费大量精力。近几年各个学校要求的毕设项目越来越难,有不少课题是研究生级别难度的,对本科…

2022 年超详细过程步骤讲解 CentOS 7 安装jdk1.8

linux系统下安装jdk以及环境变量的设置、真的是比window下方便一万倍 1、卸载系统自带jdk 1.1 查看系统自带jdk java -version1.2 查看java相关文件 rpm -qa | grep java1.3 删除openjdk相关文件 我上边有四个对应文件 命令介绍&#xff1a; rpm     管理套件 -e   …

VMware=win’server2016=Hyper-V的使用安装

VMware=win’server2016=Hyper-V的使用安装 实验准备 VMware软件--win’server2016虚拟机一台 从外部本地计算机或U盘 上传/共享 一个映像文件进虚拟机 win2016虚

【Maven】Maven快速入门2022版:从概念、安装到基本使用

本期目录一、 简介1. Maven优点2. 强大的依赖管理3. 工作原理3.1 POM3.2 Maven模型二、 安装配置1. Maven核心程序解压与配置1.1 解压1.2 指定本地仓库1.3 配置阿里云提供的镜像仓库1.4 配置Maven工程的基础JDK版本2. 配置环境变量2.1 检查 JAVA_HOME2.2 配置MAVEN_HOME三、 Ma…

9、Springboot整合Swagger3

1.什么是Swagger&#xff1f; 我们在编写了大量的接口之后&#xff0c;如果接口的调用者不是自身的话&#xff0c;那么就会面临要编写接口文档的苦恼&#xff0c;这时候Swagger就应运而生了。 Swagger 是一个规范和完整的框架&#xff0c;用于生成、描述、调用和可视化 RESTf…

笔试强训(四十)

目录一、选择题二、编程题2.1 发邮件2.1.1 题目2.1.2 题解一、选择题 &#xff08;1&#xff09;上网的时候&#xff0c;访问某个页面却突然出现了某个运营商的网页&#xff0c;出现此问题可能的原因是&#xff08;A&#xff09; A.DNS劫持 B.DDos攻击 C.MAC地址欺骗 D.伪造DH…

springboot+zookeepr+dubbo的远程服务调用

首先一定确保zookeeper正常工作 公共接口模块 为了简化代码&#xff0c;可以把需要其他服务调用的接口&#xff0c;抽取为公共接口模块dubbo-common-service&#xff0c; public interface TestService {public String clientTest(); }服务提供方 导入dubbo、zookeeper依赖…

Python学习基础笔记十六——函数嵌套

1、函数的嵌套调用 def max(a, b):if a > b:return aelse:return bdef the_max(x, y, z): # 函数的嵌套调用c max(x, y)return max(c, z)print(the_max(1, 2, 3)) 2、函数的嵌套定义&#xff1a; a 1def outer():a 1def inner():b 2print(a)print(Inner)def inner2(…

【GlobalMapper精品教程】033:影像地图羽化方式详解

在Globalmapper中,可以很方便的对影响进行多种羽化值设置。 文章目录 1. 不要羽化此图层2. 沿一个或多个边缘羽化3. 羽化到有效数据的多边形覆盖4. 在当前选定的多边形内羽化5. 裁剪到选定的边界,而不是羽化6. 在多边形外部羽化,而不是内部加载配套案例数据包中的data033.ra…

Java基于springboot+vue的家用电器销售购物商城系统 前后端分离

开发背景和意义 随着人们生活的改变&#xff0c;家电基本在家家户户都存在&#xff0c;常用的家电例如冰箱&#xff0c;洗衣机&#xff0c;电视机&#xff0c;空调等设备可以让人们的生活方式变的更加快捷舒适&#xff0c;通常情况下人们购买家电的话都是到指定的家电销售场所…

带你全方位了解光谱共焦位移传感器

任何一个行业的产生和发展都离不开科学技术的进步&#xff0c;这也是市场需求量不断扩大产生的对行业的促进&#xff0c;促使相关人员对产品的不断更新换代&#xff0c;光谱共焦位移传感器的发展也是发生着日新月异的变化。 光谱共焦位移传感器原理&#xff1a; 一束白光&#…

vue基于 input 实现密码的显示与隐藏功能

目录前言&#xff1a;一、准备图标二、Vue程序界面的展示三、代码总结&#xff1a;前言&#xff1a; 大家都知道&#xff0c;一般情况下&#xff0c;输入框的密码我们是看不到密码的&#xff0c;只有当我们点击查看密码的小图标时&#xff0c;密码才会显现出来&#xff0c;实现…