ABAP数据集群是如何存储在数据库中的



可以使用importexport语句以及遵循模板的字典表(至少有字段MANDT, RELID, SRTFD, SRTF2, CLUSTR, CLUSTD)在数据库中存储数据集群。

以下是两个示例语句,它们使用字典表ztest和区域AA将整个内部表ta_test存储/检索为数据库中名称为testtab、id为TEST的数据簇

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.000000条唯一记录导致ztest表中只有1.703条记录)。在export语句上设置compression off确实会增加记录的数量,但仍然要少得多。

我的问题是:有人知道这到底是怎么回事吗?实际数据是否存储在其他地方?ztest是否包含指向它的指针?压缩?加密?实际数据是否可以直接从数据库访问(跳过ABAP层)?

数据集群的内部格式没有文档记录(至少在官方文档中没有)。根据我的经验,它确实包含了整个数据,而不仅仅是指针:将表条目传输到不同的系统——就像在传输ALV列表布局时经常做的那样——足以移动内容。此外,二进制blob似乎不包含太多关于数据结构的信息——如果以不兼容的方式更改源/目标结构,则有丢失数据的风险。从数据库层直接访问是不可能的(这实际上在整个文档的许多地方都有说明)。也许可以对编组/解编组算法进行逆向工程,但当您有了访问手头内容的语言语句时,为什么还要麻烦呢?

相关内容

最新更新