一、測試范圍界定
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_internal4. 表刪除成功 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.txt2. 加載數據: 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 版本