分组表,分桶表

1,启动Hive服务

(1)启动HiveServer2服务

nohup hive --service metastore &

(2)启动Metastore服务

nohup hive --service hiveserver2 &

(3)查看进程信息

lsof -i:10000

2,分区表概述

定义:在大数据开发中,若要加载与显示一个超大数据规模的文件,为了提升获取数据的效率,通常也可以切割成一个个小文件夹存放。这种过程,可以称为分区
使用场景:地域,省市区,年月日等这些分级的更适合通过分区表划分

2.1单分区表,多分区表

(1)以对存有海量数据的student表为例,仅以月份字段来分区时,表示单分区表。

(2)示例·:再以对存有海量数据的student表为例,当以年份、月份、日期等多个字段来分区时,表示多分区表。(三级分区)
内部表、外部表是同一级别的数据表,而它们都可以有分区表、分桶表。
通俗地说,表分区其实就是HDFS上的不同文件夹,采用此方式可以极大的提高特定场景下Hive的操作性能

2.2创建分区表

create [external] table 表名(
字段名 字段类型 [comment '注释'],
字段名 字段类型 [comment '注释'],
...
)
[partition by(分区列 数据类型, ...)]
[row format delimited
fields terminated by '指定分隔符'];

1,说明:
(1)partition表示给数据表分区处理,但后面字段有多个时,表示多分区表;
(2)分区列名不允许与表字段同名,要单独命名,一般以年、月、日分区;
(3)注意:partition的位置要放在设定分隔字符语句之前。

-- 创建分区表: 年
create table tb_score(
name string,
subject string,
number double
)
partitioned by (year string)
row format delimited
fields terminated by "\t";

插入数据

insert into tb_score partition (year="2014") values ("张三","男",59.9);

3,使用分区表

3.1查看分区表

(1)在HDFS页面中查看
进入HDFS页面后,我们可以看到一个个的分区是以文件夹的形式显示。
(2)desc查看表字段信息
可以使用desc命令查看表相关信息,语法

-- 查看基本信息
desc 表名;
-- 以序列化形式查看更多信息
desc extended 表名;
-- 以表格形式查看所有信息
desc formatted 表名;

(3)显示有哪些分区表
当给表设定了多个分区后,可以查看到有哪些分区,命令:

show partitions 表名;

use sz41db_part;
show tables ;
desc tb_score;
desc extended tb_score;
desc formatted tb_score;
show partitions tb_score;
show partitions tb_score; -- 如何解决?

实际上,给表建立分区,就是以分区列来创建对应名称的子文件夹。

3.2加载数据

当要给分区表添加数据时,通常做法有:

-- 从本地Linux系统中导入数据到表中
load data local inpath 'linux本地文件路径名' into table 表名;
-- 从HDFS中导入数据到表中
load data inpath 'hdfs文件路径名' [overwrite] into table 表名;

3.3修改表

对于分区列的值,可以使用alter关键字进行修改,修改操作有:
(1)添加分区
当要给数据表新增一个分区时,可以使用add关键字,语法:

alter table 表名 add partition(分区字段='分区值');

(2)删除分区
删除一个失效分区时,需要用到drop关键字,语法:

alter table 表名 drop partition(分区字段='分区值');

(3)修改分区值
可以使用rename to关键字来修改分区列所对应的值,语法:

alter table 表名 partition(分区字段='旧分区值') rename to partition(分区字段='新分区值');

示例代码:

use sz41db_part;
show tables ;
show partitions tb_score;
alter table tb_score add partition (year="4444");
alter table tb_score add partition (year="5000");
alter table tb_score drop partition (year="4444");
alter table tb_score drop partition
(year="__HIVE_DEFAULT_PARTITION__");
alter table tb_score partition (year="5000") rename to
partition (year="6666");

若要修改分区表信息时,一般需要借助alter关键字。

3.3.1修复分区表

当我们手动在HDFS页面中创建分区目录,甚至给分区目录下导入结构化数据后,发现使用:仍然无法查询出数据结果,这是为什么呢?
没有在HDFS中刷新出分区数据信息,导致无法识别。
而实际上,这个操作称为修复分区表

msck repair table 表名;

4,多分区表案例

当对数据表进行多级分区处理时,常以年、月、日形式来划分数据。

create table part_product(
pid int,
pname string,
price double,
number int
)
partitioned by (year string, month string, day string)
row format delimited
fields terminated by ";";

插入数据:

-- 上传数据到linux中, 加载到表中
load data local inpath
"/root/day08_hive/more_part/order20230415.txt" into table part_product partition (year="2023",month="4",day="15");

建议给表设定分区列的类型设定为字符串,方便后期操作;

5.分桶表的使用

定义:分桶表也叫做桶表,源自建表语法中【bucket】单词,是一种用于优化查询而设计的表类型。
该功能可以让数据分解为若干个部分,且易于管理的文件。
通俗地说,对表进行分桶处理,和分区类似,也是一种通过改变表的存储模式,从而完成对表优化的一种调优方式。
但和分区不同,分区是将表拆分到不同的子文件夹中进行存储,而分桶是将表拆分到固定数量的不同文件中进行存储。
原理:在分桶时,我们要指定根据哪个字段来将数据分为几桶(即几个部分),而桶编号相同的数据会被分到同一个桶当中。

分桶默认规则是:

Bucket number = hash_function(bucketing_column) mod num_buckets
# hash_function() 函数名
# bucketing_column 值类型

:hash_function函数的返回值,取决于分桶字段bucketing_column的类型。

1)如果是int类型,hash_function(int) == int;
(2)如果是其他类型,比如string或复杂数据类型,hash_function比较棘手,将是从该类型生成的某个数字,比如hashcode值。
# 可以通过select hash("值") 查看哈希码

5.1 创建与使用分桶表

create [external] table 表名(
字段名 字段类型 [comment '注释'],
字段名 字段类型 [comment '注释'],
...
)
[partition by(分区列 数据类型, ...)]
[clustered by (字段名) into 分桶数 buckets]
[row format delimited
fields terminated by '指定分隔符'];

说明:
(1)clustered表示给数据表分桶处理,且后面的[into 分桶数 buckets]的数字,表示桶数为多少;[下面说明]
(2)需要注意的是,分桶的字段必须是表中已经存在的字段名;
(3)若分区、分桶同时存在,且分区语句在前,分桶在后;
(4)注意:clustered的位置要放在partition字符语句之后。
示例代码:

create table bucket_id_course(
id int,
subject string,
name string
)
clustered by (id) into 3 buckets
row format delimited
fields terminated by "\t";

desc formatted bucket_id_course;
load data local inpath "/root/day08_hive/bucket/course01.txt"
into table bucket_id_course;

特别注意,分桶列必须是表内已有的字段名,可以是数值型、也可以是字符串型。

5.3hash建模

创建分桶表语法:

create [external] table 表名(
字段名 字段类型 [comment '注释'],
字段名 字段类型 [comment '注释'],
...
)
[clustered by (字段名) into 分桶数 buckets]
...

上述格式中[分桶数]代表分桶的数量。而如果没有额外修改reduce数量时,默认分桶数和reduce值一致。
分桶的原理:首先,对分桶字段值进行Hash算法加密,然后对分桶数量进行取模,生成对应分桶文件。
了解:Hash算法是一种数据加密算法,其原理我们不去详细讨论,我们只需要知道其主要特征:

同样的值被Hash算法加密后的结果,是一致的!
比如,"heima"哈希值是99159456, 无论hash3取模多少次,结果都是0# 可以通过select hash("值") 查看哈希码

基于如上特征,在辅以有3个分桶文件的基础上,将Hash的结果基于3取模(即除以
3取余数)。结果:

一个字符串或无论什么数据,得到的取模结果均是:012,其中一个。

5.4分桶表的优势

1,和非分桶表相比,使用分桶表能带来性能提升。优势有:
(1)提升过滤性能
基于分桶字段的where过滤查询时,可减少全表扫描:

select * from course where id=xxx;

(2)提升join多表查询
JOIN时可以提高MapReduce程序效率,减少笛卡尔积数量。
对于JOIN操作两个表有一个相同的列,如果对这两个表都进行了分桶操作。那么将保存相同列值的桶进行JOIN操作就可以,这样能大大较少JOIN的数据量
(3)提升分组效率
以某列作为分组时,可减少全表扫描,进入到分桶表中处理,效率高一些
(4)提升抽样处理
当对分桶表数据进行抽样可减少数据的抽样处理
当数据量特别大时,对全体数据进行处理存在困难,抽样就显得尤其重要了。
抽样可以从被抽取的数据中,估计和推断出整体的特性,是科学实验、质量检验、社会调查普遍采用的一种经济有效的工作和研究方法。
使用分桶表对海量数据内容作文件拆分后,一般能对过滤带来不少性能提升;
在这里插入图片描述
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

生物信息基础:实用Git命令,掌握这些就够了

我发现有搞了几年生信的朋友还不会用Github管理代码,这不免令人意外。我一直强调基础知识的重要性,而这些知识又是可以在短时间内掌握的。Github管理平时写的代码,要用到Git命令。虽然官方Git命令非常多,但我们只要掌握常用的几个…

初始ProtoBuf

目录​​​​​​​ ⼀、初识ProtoBuf 1. 序列化概念 2. ProtoBuf是什么 3. ProtoBuf的使用特点 ⼆、安装ProtoBuf 1、ProtoBuf在window下的安装 2、ProtoBuf在Linux下的安装 ⼀、初识ProtoBuf 1. 序列化概念 序列化和反序列化 序列化:把对象转换为字节序列…

037、目标检测-SSD实现

之——简单实现 目录 之——简单实现 杂谈 正文 1.类别预测层 2.边界框预测 3.多尺度输出联结做预测(提高预测效率) 4.多尺度实现 5.基本网络块 6.完整模型 杂谈 原理查看:037、目标检测-算法速览-CSDN博客 正文 1.类别预测层 类别…

Elasticsearch中的语义检索

一、传统检索的背景痛点 和传统的基于关键词的匹配方式不同,语义检索,利用大模型,将文本内容映射到神经网络空间,最终记忆token做检索。 例如想要搜索中国首都,例如数据集中,只有一篇文章在描述北京&#x…

斯坦福机器学习 Lecture2 (假设函数、参数、样本等等术语)

假设函数定义 假设函数,猜一个 x->y 的类型,比如 y ax b,随后监督学习的任务就是找到误差最低的 a 和 b 参数 有时候我们可以定义 x0 1,来让假设函数的整个表达式一致统一 如上图是机器学习中的一些术语 额外的符号&#xf…

【Spring Boot 源码学习】Banner 信息打印流程

Spring Boot 源码学习系列 Banner 信息打印流程 引言往期内容主要内容1. printBanner 方法2. 关闭 Banner 信息打印3. SpringApplicationBannerPrinter 类3.1 LOG 模式打印3.1.1 getBanner 方法3.1.1.1 新建 Banners3.1.1.2 添加 ImageBanner3.1.1.3 添加 ResourceBanner3.1.1.…

宏--offsetof使用

文章目录 宏介绍结构体测试代码运行结果 宏介绍 宏--offsetof(type, member),type就是结构的类型,member就是需要的成员名。表达式的结果是一个size_t的值,表示这个指定成员开始存储的位置距离结构开始存储的位置偏移几个字节结构体 typede…

Django自动生成docs接口文档

1.创建Django项目 python manage.py startproject django20252.创建子应用 python manage.py startapp api3.安装依赖包 pip install coreapi4.创建urls.py from django.contrib import admin from django.urls import path, include from rest_framework import routers f…

网络运维与网络安全 学习笔记2023.11.19

网络运维与网络安全 学习笔记 第二十天 今日目标 STP工作原理、STP高级配置、MSTP工作原理 MSTP配置案例、MSTP负载均衡 STP工作原理 单点故障 PC之间的互通链路仅仅存在1个 任何一个设备或链路出现问题,PC之间都会无法通信 解决方案 增加冗余/备份设备 增加冗…

PCL 计算一条射线与一个三角形的交点

文章目录 一、简介二、实现代码三、实现效果参考资料一、简介 这里我们使用点向式分别表示一个射线与一个三角形,如下图所示: 其中,平面的法向量 N N N可以由三角形两条边的叉乘来计算,点R0到平面的法向距离

数学建模值TOPSIS法及代码

TOPSIS法 TOPSIS法简称为优劣距离解法,是一种常见法综合评价方法,其能充分利用原始数据的信息,其结果能精确地反映各个评价方案之间的差距。 模型介绍 上篇文章谈到的层次分析法是有局限性的。比如评价的决策层不能太多,太多的…

脚本(JavaScript)-练手-简单的随机音乐播放器

浅浅的写个简单的随机音乐播放脚本(可移动),注释很详细,直接上源码 效果: // UserScript // name 播放音乐脚本 // namespace 代码对我眨眼睛 // version 1.2 // description 在API上请求音乐链接并随机自动连续播放音乐&…

【MySQL--->事务】

文章目录 [TOC](文章目录) 一、基本概念二、事务的操作1.设置全局事务隔离级别2.设置事务提交方式3.事务操作 三、事务隔离性1.隔离性概念2 .隔离级别设置 四、MVCC多版本控制2. read view 一、基本概念 事务是由若干条具有逻辑相关性的SQL语句组成的,用来完成某种任务的**逻辑…

使用 C 语言快速排序将字符串按照 ASCII 码升序排列

示例代码&#xff1a; #include <stdio.h> #include <string.h> #include <stdlib.h>static Comp(const void *a, const void *b) {char *pa (char *)a;char *pb (char *)b;return strcmp(a, b); }int main(void) {char strs[3][10] { "bd", &q…

SpringBoot 整合 JdbcTemplate

数据持久化有几个常见的方案&#xff0c;有 Spring 自带的 JdbcTemplate 、有 MyBatis&#xff0c;还有 JPA&#xff0c;在这些方案中&#xff0c;最简单的就是 Spring 自带的 JdbcTemplate 了&#xff0c;这个东西虽然没有 MyBatis 那么方便&#xff0c;但是比起最开始的 Jdbc…

关于爬虫中的hook(defineProperty,hook cookies, hook载荷数据,hookXHR)

关于爬虫中的hook&#xff1a; defineProperty var people {age: 19, }; var count20; console.log(people.age) // 参数&#xff1a;对象 属性名字 函数 Object.defineProperty(people, age, {get: function () {console.log(获取值&#xff01;);return count;},// set: …

C++ map和set的使用

关联式容器 vector、list、deque统称为序列式容器&#xff0c;因为其底层为线性序列的数据结构&#xff0c;存储的是元素本身 侧重于单纯的存储数据 关联式容器也是用来存储数据的&#xff0c;里面存储的是<key, value>结构的键值对&#xff0c;在数据检索时比序列式…

漫谈广告机制设计 | 万剑归宗:聊聊广告机制设计与收入提升的秘密(2)

书接上文漫谈广告机制设计 | 万剑归宗&#xff1a;聊聊广告机制设计与收入提升的秘密&#xff08;1&#xff09;&#xff0c;我们谈到流量作为一种有限资源&#xff0c;其分配方式&#xff08;或者交易方式&#xff09;也经历了几个阶段&#xff1a;第一个是谈判定价阶段&#…

新材料工厂生产管理mes系统

万界星空科技新材料云MES系统从需求分析、产品选型、系统集成、可扩展性和灵活性以及安全性和稳定性等多个角度进行考虑。 如果您的企业也属于新材料生产制造行业&#xff0c;同时也计划通过MES系统来进行整个生产过程的数字化管控。 欢迎搜索万界星空科技线上咨询或者直接拨…

论文阅读:JINA EMBEDDINGS: A Novel Set of High-Performance Sentence Embedding Models

Abstract JINA EMBEDINGS构成了一组高性能的句子嵌入模型&#xff0c;擅长将文本输入转换为数字表示&#xff0c;捕捉文本的语义。这些模型在密集检索和语义文本相似性等应用中表现出色。文章详细介绍了JINA EMBEDINGS的开发&#xff0c;从创建高质量的成对&#xff08;pairwi…
最新文章