特殊 SAP 表 — 池表与簇表 (★★★)
特殊 SAP 表 — 池表与簇表 (★★★)
#abap #abap-dictionary #abap-tables
概览表
| Feature (特性) | Transparent (透明表) | Pooled (池表) | Cluster (簇表) |
|---|---|---|---|
| DB 中独立存在 | 是 | 否 | 否 |
| 存储方式 | 独立表 | 多表合并到表池 | 多表合并到表簇 |
| 数据压缩 | 否 | 是(非键字段) | 是(全部数据) |
| 可建索引 | 主键+二级索引 | 仅键字段 | 仅簇键 |
| JOIN / View | 支持 | 不支持 | 不支持 |
| Table Append | 支持 | 不支持 | 不支持 |
| SQL 限制 | 无 | 仅 Open SQL | 仅 Open SQL |
池表 (Pooled Tables)
多个逻辑表存储在一个表池 (Table Pool) 中。
1 | Dictionary: Database: |
- TABNAME: 池表名称
- VARKEY: 池表键字段的拼接(所以键字段必须是 C 类型)
- VARDATA: 非键字段的压缩数据
- DATALN: VARDATA 的长度
📌池表特点
- 各池表之间无功能依赖(只是合并小表)
- 键字段的交集可能为空
- 键字段必须是 C 类型(字符型)
簇表 (Cluster Tables)
功能相关的数据存储在一个表簇 (Table Cluster) 中。
1 | Dictionary: Database: |
- Cluster Key: 各簇表键字段的交集
- VARDATA: 所有依赖数据的压缩存储
- PAGNO: 页号(溢出记录时使用)
- 数据库接口负责压缩/解压
📌簇表特点
- 簇表之间有功能依赖(共享簇键)
- VARDATA 包含解压描述信息
- 溢出时创建新页(PAGNO 递增)
优缺点
优点
- 压缩存储:减少磁盘空间和网络负载
- 减少表数量:合并到物理表中
- 更少 SQL 语句:减少不同 SQL 的种类
- 簇表的联合读取:功能相关数据一起读取,减少数据库访问
缺点
- 索引受限:非键字段不能建索引
- 无 JOIN/View:不能用于数据库视图或 ABAP JOIN
- 无 Table Append:不能用 Append 结构
- 仅 Open SQL:不能用 Native SQL
- WHERE 限制:池表仅键字段,簇表仅簇键字段的 WHERE 传递到 DB
- ORDER BY/GROUP BY 限制:非键字段不支持
考试/测试模式
| Scenario/Keyword (场景/关键词) | Answer (答案) |
|---|---|
| “池表和簇表的主要区别?” | 池表无功能依赖,簇表有功能依赖(共享簇键) |
| “池表键字段类型限制?” | 必须是 C 类型 |
| “池表/簇表能用 JOIN 吗?” | 不能 |
| “池表/簇表能用 Append 结构吗?” | 不能 |