可以使用 import
和 export
语句以及遵循模板的字典表(至少具有字段 MANDT, RELID, SRTFD, SRTF2, CLUSTR, CLUSTD
)将数据簇存储在数据库中。
下面是两个示例语句,它们使用字典表 ta_test
和区域 testtab
将整个内部表 TEST
存储/检索为数据库中名称为 ztest
和 ID 为 AA
的数据集群
export testtab = ta_test to database ztest(AA) id 'TEST'.
import testtab = ta_test from database ztest(AA) id 'TEST'.
查看ztest
表的内容,看到如下记录(前4个字段为主键):
MANDT 200
RELID AA
SRTFD TEST
SRTF2 0 (auto-incremented for each record)
CLUSTR integer value with a maximum of 2.886
CLUSTD a 128 character hexadecimal string
我还注意到以这种方式存储的数据量比内部表中的数据少很多(例如,内部表中的 1.000.000 条唯一记录导致 ztest
中只有 1.703 条记录 table )。在 compression off
语句上设置 export
确实增加了记录量,但还是少了很多。
我的问题:有人知道这是如何工作的吗?实际数据是否存储在其他地方,ztest
是否包含指向它的指针?压缩?加密?是否可以直接从数据库访问实际数据(跳过 ABAP 层)?
最佳答案
数据集群的内部格式没有记录(至少没有在官方文档中)。根据我的经验,它确实包含全部数据,而不仅仅是指针:将表条目传输到不同的系统——正如您在传输 ALV 列表布局时经常做的那样——足以将内容移动过来。此外,二进制 blob 似乎不包含太多关于数据结构的信息——如果您以不兼容的方式更改源/目标结构,您就有丢失数据的风险。从数据库层直接访问是不可能的(这实际上在整个文档的许多地方都有说明)。或许可以对编码/解码算法进行逆向工程,但既然您已经有了访问手头内容的语言语句,为什么还要费心呢?
关于database - ABAP数据簇是如何存储在数据库中的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13901689/