Spark on Hive表结构变更
Spark on Hive表结构变更
- 1、表结构变更概述
1、表结构变更概述
在Spark on Hive架构中,表结构(Schema)变更是一个常见且重要的操作。理解其背景、使用场景以及具体方式对于大数据平台管理至关重要
1.1、Spark on Hive元数据管理
- Hive Metastore(HMS): 核心组件。它是一个独立的关系型数据库(如MySQL、PostgreSQL),存储了Hive表、分区、列、数据类型、存储位置等元数据信息
- Spark: Spark本身不存储元数据。当Spark需要处理Hive表时,它通过HMS连接到Hive Metastore数据库,获取表的元数据(Schema、分区、文件位置等)
- Spark on Hive: 指Spark被配置为使用Hive的Metastore服务。这意味着:
- Spark可以读取Hive中定义的表
- Spark可以创建表,并将元数据写入Hive Metastore,使得这些表也能被Hive或其他配置了相同Metastore的工具访问
- SparkSQL的
CREATE/ALTER TABLE
等DDL语句实质上是通过Spark向Hive Metastore发出操作指令,由Hive Metastore执行元数据变更
1.2、表结构变更的背景
- 1)业务需求演进
- 新增业务指标需要记录新的字段
- 业务逻辑变化,业务口径改变
- 2)数据模型优化
- 调整数据类型以提高存储效率或计算精度(例如
STRING
改为TIMESTAMP
用于时间计算,INT
改为BIGINT
防止溢出) - 添加分区字段以大幅提升特定查询性能和管理效率
- 添加分桶字段优化JION和采样性能
- 调整数据类型以提高存储效率或计算精度(例如
- 3)数据治理
- 添加列注释、表注释,以提高可理解性
- 执行新的贯标,使数据符合新的标准和规范
- 4)错误修正
- 初次建表时定义有误(列名写错、数据类型选错等)
1.3、表结构变更的常见操作
- 添加列 (
ADD COLUMN
): 在表末尾添加新列,通常对现有数据无影响 - 删除列 (
DROP COLUMN
): 移除不再需要的列,在Hive中,这通常只对元数据操作,物理数据文件中的旧数据可能不会立即删除,Spark读取时将忽略这些被删除列的数据 - 重命名列 (
RENAME/CHANGE COLUMN
): 修改列名,需要更新所有引用旧列名的查询和作业 - 修改列数据类型 (
CHANGE COLUMN
): 更改现有列的数据类型,风险较高,必须确保现有数据能安全转换为新类型,否则查询可能失败或数据损坏,Spark/Hive不会自动转换现有文件中的数据 - 修改列顺序 (
CHANGE COLUMN