当前位置: 首页 > news >正文

Hive的分区表分桶表

1.分区表:

        是Hive中的一种表类型,通过将表中的数据划分为多个子集(分区),每个分区对应表中的某个特定的列值,可以提高查询性能和管理数据的效率。分区表的每个分区存储在单独的目录中,分区的定义基于表中的一个或多个列。使用分区表的主要目的是减少查询扫描的数据量,从而提高查询效率。

        分区过细可能导致生成大量的小文件,影响HDFS性能和MapReduce任务的效率。需要定期进行小文件合并操作。

CREATE TABLE customer_data (customer_id STRING,name STRING,age INT,email STRING
)
PARTITIONED BY (city STRING)
STORED AS ORC;select *
from customer_data;-- 插入 New York 的数据
INSERT INTO TABLE customer_data PARTITION (city='New York')
VALUES
('1', 'John Doe', 30, 'john@example.com'),
('2', 'Jane Smith', 25, 'jane@example.com'),
('3', 'Bob Johnson', 40, 'bob@example.com');-- 插入 Los Angeles 的数据
INSERT INTO TABLE customer_data PARTITION (city='Los Angeles')
VALUES
('4', 'Alice Brown', 32, 'alice@example.com'),
('5', 'Charlie Davis', 28, 'charlie@example.com');-- 插入 Chicago 的数据
INSERT INTO TABLE customer_data PARTITION (city='Chicago')
VALUES
('6', 'Eve White', 45, 'eve@example.com'),
('7', 'Frank Black', 37, 'frank@example.com');

可以查看到hdfs上创建了三个目录,对应三个分区,使用带有where条件的select进行查询,会直接从对应的分区目录下查找数据,从而减少查询扫描的数据量,提高性能。

SELECT * FROM customer_data WHERE city='New York';

2.分桶表:

        是Hive中的另一种表类型,通过对表中的数据进行散列分桶(hash bucket),可以进一步提高查询性能,尤其是在进行连接(join)和聚合(aggregation)操作时。分桶表将数据划分为固定数量的桶(bucket),每个桶存储在单独的文件中。
---------------------------------------------------分桶表的特点---------------------------------------------------
数据划分:根据一个或多个列的哈希值,将数据分布到固定数量的桶中。
文件存储:每个桶的数据存储在独立的文件中。
均匀分布:理想情况下,数据在所有桶中均匀分布,从而提高查询性能。

CREATE TABLE customer_data2 (customer_id STRING,name STRING,age INT,email STRING
)
CLUSTERED BY (customer_id) INTO 4 BUCKETS
STORED AS ORC;
-- 插入数据到分桶表
--通过这些步骤,我们创建了一个按 customer_id 列进行分桶的 Hive 表 customer_data,并插入了具体的数据。
INSERT INTO TABLE customer_data2 VALUES
('1', 'John Doe', 30, 'john@example.com'),
('2', 'Jane Smith', 25, 'jane@example.com'),
('3', 'Bob Johnson', 40, 'bob@example.com'),
('4', 'Alice Brown', 32, 'alice@example.com'),
('5', 'Charlie Davis', 28, 'charlie@example.com'),
('6', 'Eve White', 45, 'eve@example.com'),
('7', 'Frank Black', 37, 'frank@example.com'),
('8', 'Grace Green', 22, 'grace@example.com');select *
from customer_data2;

通过查看hdfs上的路径我们可以看到这些数据会按照对应列的hash值分到不同的桶中

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • RKNN3588——利用推理YOLOv8推理图片
  • 浅析Nginx技术:开源高性能Web服务器与反向代理
  • [RK3566-Android11] 使用iPhone14/15出现的蓝牙断开重连无声音问题
  • duplicate key value violates unique constraint
  • 谷粒商城学习笔记-19-快速开发-逆向生成所有微服务基本CRUD代码
  • 科研绘图系列:R语言两组数据散点分布图(scatter plot)
  • 【Java16】多态
  • 【Cesium开发实战】火灾疏散功能的实现,可设置火源点、疏散路径、疏散人数
  • 修正版头像上传组件
  • 网络规划与设计————期末复习
  • 华为手机联系人不见了怎么恢复?3个解决方案
  • Go协程与通道的综合应用问题
  • 240707-Sphinx配置Pydata-Sphinx-Theme
  • Linux tputs
  • vb.netcad二开自学笔记9:界面之ribbon
  • [js高手之路]搞清楚面向对象,必须要理解对象在创建过程中的内存表示
  • Android 初级面试者拾遗(前台界面篇)之 Activity 和 Fragment
  • Gradle 5.0 正式版发布
  • Javascript 原型链
  • JSDuck 与 AngularJS 融合技巧
  • JS变量作用域
  • Linux编程学习笔记 | Linux多线程学习[2] - 线程的同步
  • Mac 鼠须管 Rime 输入法 安装五笔输入法 教程
  • Spring Security中异常上抛机制及对于转型处理的一些感悟
  • vue-router的history模式发布配置
  • 动手做个聊天室,前端工程师百无聊赖的人生
  • 浮现式设计
  • - 概述 - 《设计模式(极简c++版)》
  • 记一次用 NodeJs 实现模拟登录的思路
  • 七牛云 DV OV EV SSL 证书上线,限时折扣低至 6.75 折!
  • 如何优雅地使用 Sublime Text
  • 使用Swoole加速Laravel(正式环境中)
  • No resource identifier found for attribute,RxJava之zip操作符
  • const的用法,特别是用在函数前面与后面的区别
  • ​Distil-Whisper:比Whisper快6倍,体积小50%的语音识别模型
  • ​html.parser --- 简单的 HTML 和 XHTML 解析器​
  • # include “ “ 和 # include < >两者的区别
  • #微信小程序(布局、渲染层基础知识)
  • $emit传递多个参数_PPC和MIPS指令集下二进制代码中函数参数个数的识别方法
  • (1)Android开发优化---------UI优化
  • (android 地图实战开发)3 在地图上显示当前位置和自定义银行位置
  • (Java入门)学生管理系统
  • (Redis使用系列) Springboot 使用redis实现接口Api限流 十
  • (第61天)多租户架构(CDB/PDB)
  • (附源码)springboot家庭财务分析系统 毕业设计641323
  • (附源码)计算机毕业设计ssm高校《大学语文》课程作业在线管理系统
  • (附源码)计算机毕业设计SSM疫情下的学生出入管理系统
  • (三)模仿学习-Action数据的模仿
  • (十二)Flink Table API
  • (转)大道至简,职场上做人做事做管理
  • *算法训练(leetcode)第三十九天 | 115. 不同的子序列、583. 两个字符串的删除操作、72. 编辑距离
  • ... fatal error LINK1120:1个无法解析的外部命令 的解决办法
  • .Net core 6.0 升8.0
  • .Net CoreRabbitMQ消息存储可靠机制
  • .NET 常见的偏门问题