Hive的分区表&分桶表

1.分区表:

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

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

sql 复制代码
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进行查询,会直接从对应的分区目录下查找数据,从而减少查询扫描的数据量,提高性能。

sql 复制代码
SELECT * FROM customer_data WHERE city='New York';

2.分桶表:

是Hive中的另一种表类型,通过对表中的数据进行散列分桶(hash bucket),可以进一步提高查询性能,尤其是在进行连接(join)和聚合(aggregation)操作时。分桶表将数据划分为固定数量的桶(bucket),每个桶存储在单独的文件中。

---------------------------------------------------分桶表的特点---------------------------------------------------

数据划分:根据一个或多个列的哈希值,将数据分布到固定数量的桶中。

文件存储:每个桶的数据存储在独立的文件中。

均匀分布:理想情况下,数据在所有桶中均匀分布,从而提高查询性能。

sql 复制代码
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值分到不同的桶中

相关推荐
香山上的麻雀10087 小时前
Hive内部表(MANAGED_TABLE)的“批量删除分区”特性详解
数据仓库·hive·hadoop
石像鬼₧魂石13 小时前
钢结构ERP管理系统 —— 玻璃拟态 · 单文件HTML(系统为开发测试虚拟数据)
大数据·数据仓库·制造·数据库开发·数据库架构
牛奶咖啡132 天前
大数据Hadoop运维应用实践——双NameNode高可用Hadoop集群架构(上)
hadoop·高可用hadoop集群搭建·给服务器做免密信任·修改服务器主机名称·服务器本地配置主机名与ip映射·服务器配置jdk环境·服务器安装zooker
jjjava2.02 天前
SpringMVC入门指南:从零掌握核心要点
数据仓库·hive·hadoop
Jay_Franklin2 天前
Python 数据处理工作流:marimo、PyCharm 与数据存储
开发语言·数据仓库·ide·python·pycharm·数据分析·开源
ljs6482739513 天前
Hadoop集群部署常见问题
大数据·hadoop·分布式
TTBIGDATA4 天前
【Ambari Plus】14.Hue 安装
大数据·hadoop·ambari·hdp·hue·cdh·bigtop
RestCloud4 天前
借助ETL工具,实现AI智能体+数据的落地
数据仓库·人工智能·sql·etl·etlcloud·数据集成平台·java脚本
AllData公司负责人4 天前
数据库同步平台|AIIData数据中台实现OceanBase、达梦数据库、OpenGauss、人大金仓、Hive、TDengine 一键接入Doris
大数据·数据库·hive·mysql·oceanbase·tdengine
2501_942389554 天前
特斯拉的车辆摄像头每四天为AI训练集采集的数据量
人工智能·hadoop·zookeeper·oracle·时序数据库·memcache