Hive 存储管理测试用例设计指南
一、测试范围界定
Hive 存储管理测试主要覆盖以下核心模块:
- 内部表 / 外部表存储特性验证
- 分区表 / 分桶表管理功能测试
- 存储格式兼容性测试(TextFile/ORC/Parquet 等)
- 数据加载与导出机制验证
- 元数据与 HDFS 存储一致性校验
- 异常场景与边界条件处理
二、测试用例设计框架
每个测试用例应包含:
- 测试用例 ID:唯一标识符(如 TC-HIVE-STORAGE-XXX)
- 测试目标:明确验证的存储特性
- 前置条件:Hive 环境状态、数据准备要求
- 测试步骤:详细操作流程(含 HiveQL 命令)
- 预期结果:元数据与 HDFS 存储的期望状态
- 优先级:P0(核心)/P1(重要)/P2(一般)
三、核心测试用例示例
模块 1:内部表存储管理
用例 ID | 测试目标 | 前置条件 | 测试步骤 | 预期结果 | 优先级 |
---|---|---|---|---|---|
TC-HIVE-STORAGE-001 | 内部表删除时数据自动清理 | HDFS 集群正常运行 | 1. 创建内部表:CREATE TABLE test_internal (id INT) STORED AS TEXTFILE; 2. 加载数据: LOAD DATA LOCAL INPATH '/tmp/data.txt' INTO TABLE test_internal; 3. 记录 HDFS 路径: DESCRIBE EXTENDED test_internal; 4. 删除表: DROP TABLE test_internal; 5. 检查 HDFS 路径是否存在 | 1. 表创建成功 2. 数据加载成功 3. HDFS 路径类似 /user/hive/warehouse/dbname.db/test_internal 4. 表删除成功 5. HDFS 对应目录被递归删除 | P0 |
TC-HIVE-STORAGE-002 | 内部表数据持久化验证 | 已创建 test_internal 表 | 1. 插入数据:INSERT INTO test_internal VALUES (1); 2. 重启 Hive 服务 3. 查询数据: SELECT * FROM test_internal; | 1. 插入成功 2. 服务重启正常 3. 能查询到 (1) 记录 | P1 |
模块 2:外部表存储管理
用例 ID | 测试目标 | 前置条件 | 测试步骤 | 预期结果 | 优先级 |
---|---|---|---|---|---|
TC-HIVE-STORAGE-003 | 外部表删除时数据保留 | HDFS 存在/external_data 目录 | 1. 创建外部表:CREATE EXTERNAL TABLE test_external (id INT) LOCATION '/external_data'; 2. 加载数据: LOAD DATA INPATH '/tmp/data.txt' INTO TABLE test_external; 3. 删除表: DROP TABLE test_external; 4. 检查 HDFS /external_data 目录 | 1. 表创建成功 2. 数据加载成功 3. 表删除成功 4. /external_data 目录及数据文件仍存在 | P0 |
模块 3:分区表存储管理
用例 ID | 测试目标 | 前置条件 | 测试步骤 | 预期结果 | 优先级 |
---|---|---|---|---|---|
TC-HIVE-STORAGE-004 | 静态分区数据存储验证 | 已创建分区表:CREATE TABLE test_partition (id INT) PARTITIONED BY (dt STRING); | 1. 添加分区并加载数据:LOAD DATA LOCAL INPATH '/tmp/data_20230101.txt' INTO TABLE test_partition PARTITION (dt='20230101'); 2. 查看 HDFS 存储结构 | 1. 数据加载成功 2. HDFS 生成路径: /user/hive/warehouse/test_partition/dt=20230101 | P0 |
TC-HIVE-STORAGE-005 | 动态分区自动创建 | Hive 动态分区模式开启:SET hive.exec.dynamic.partition.mode=nonstrict; | 1. 执行动态插入:INSERT INTO test_partition PARTITION (dt) SELECT id, dt FROM source_table; 2. 查看分区列表: SHOW PARTITIONS test_partition; | 1. 插入成功 2. 自动创建对应 dt 值的分区目录 | P1 |
模块 4:存储格式兼容性
用例 ID | 测试目标 | 前置条件 | 测试步骤 | 预期结果 | 优先级 |
---|---|---|---|---|---|
TC-HIVE-STORAGE-006 | ORC 格式表数据存储验证 | 无 | 1. 创建 ORC 表:CREATE TABLE test_orc (id INT, name STRING) STORED AS ORC; 2. 插入数据: INSERT INTO test_orc VALUES (1, 'test'); 3. 查询数据并验证 HDFS 文件格式 | 1. 表创建成功 2. 插入成功 3. 查询返回 (1,'test'),HDFS 文件为.orc 格式 | P0 |
TC-HIVE-STORAGE-007 | 压缩配置生效验证 | 已创建 test_orc 表 | 1. 设置压缩:SET hive.exec.compress.output=true; SET mapreduce.output.fileoutputformat.compress.codec=org.apache.hadoop.io.compress.SnappyCodec; 2. 插入 1000 行测试数据 3. 检查 HDFS 文件大小 | 1. 参数设置成功 2. 数据插入成功 3. 文件大小明显小于未压缩情况 | P1 |
模块 5:异常场景处理
用例 ID | 测试目标 | 前置条件 | 测试步骤 | 预期结果 | 优先级 |
---|---|---|---|---|---|
TC-HIVE-STORAGE-008 | 加载错误格式数据校验 | 已创建表test_error (id INT, name STRING) | 1. 准备包含非 INT 类型的文件error_data.txt 2. 加载数据: LOAD DATA LOCAL INPATH '/tmp/error_data.txt' INTO TABLE test_error; 3. 执行查询: SELECT * FROM test_error WHERE id IS NULL; | 1. 数据加载无报错(Hive 默认不校验) 2. 错误行 id 字段为 NULL 3. 可通过 SERDEPROPERTIES ('serialization.format'=',') 配置严格校验 | P1 |
四、测试用例编写规范
- 命名规范:
TC-HIVE-STORAGE-XXX
(XXX 为 3 位数字序号) - 步骤描述:每步操作需包含完整 HiveQL 命令或 Shell 命令
- 预期结果:需同时验证元数据(
DESCRIBE
)和 HDFS 存储(hdfs dfs -ls
) - 依赖管理:有依赖关系的用例需在前置条件中明确标注
- 自动化适配:关键步骤需可通过脚本执行(如 Beeline 命令)
五、测试环境配置建议
bash
# Hive配置优化
set hive.exec.dynamic.partition=true;
set hive.exec.dynamic.partition.mode=nonstrict;
set hive.exec.max.dynamic.partitions=1000;# 测试数据生成
hive -e "INSERT INTO test_data SELECT id, concat('name_', id) FROM (SELECT posexplode(split(space(1000),'')) AS (id,val)) t;"
六、常见问题与解决方案
- 分区数据倾斜:测试时需覆盖数据分布不均场景,建议设置随机分区键
- 元数据不一致:使用
ANALYZE TABLE table_name COMPUTE STATISTICS;
刷新统计信息 - 存储格式兼容性:不同版本 Hive 的 ORC 格式可能不兼容,需在测试环境标注 Hive 版本