当前位置: 首页 > 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值分到不同的桶中

http://www.lryc.cn/news/400407.html

相关文章:

  • PostgreSQL17索引优化之支持并行创建BRIN索引
  • 在Vue中,子组件向父组件传递数据
  • 数据结构(顺序表)
  • MySQL之基本查询(上)-表的增删查改
  • RocketMQ源码学习笔记:Producer发送消息流程
  • kotlin flow collect collectLatest 区别
  • ELK集群搭建
  • zookeeper+kafka消息队列集群部署
  • LLM_入门指南(零基础搭建大模型)
  • Element Plus 与 Vue 3:构建现代化 Web 应用的完美搭档
  • 线程间通信与变量修改感知:几种常用方法
  • 前后端通信 —— HTTP/HTTPS
  • 人工智能 (AI) 应用:一个高精度ASD 诊断和照护支持系统
  • C# 1.方法
  • 【C++进阶学习】第七弹——AVL树——树形结构存储数据的经典模块
  • px,em,rem之间的关系换算
  • HTTP——POST请求详情
  • 外包干了1个月,技术明显退步。。。
  • LeetCode加油站(贪心算法/暴力,分析其时间和空间复杂度)
  • 5.1 软件工程基础知识-软件工程概述
  • HttpUtil工具
  • 并发编程-锁的分类
  • K8S系列-Kubernetes基本概念及Pod、Deployment、Service的使用
  • 在VSCode上创建Vue项目详细教程
  • Go语言入门之流程控制简述
  • 接口测试框架基于模板自动生成测试用例!
  • C++ STL stable_sort用法
  • YOLO v8进行目标检测的遇到的bug小结
  • FastAPI -- 第二弹(响应模型、状态码、路由APIRouter、后台任务BackgroundTasks)
  • 案例 | 人大金仓助力山西政务服务核心业务系统实现全栈国产化升级改造