database - ABAP数据簇是如何存储在数据库中的?

标签 database abap

可以使用 importexport 语句以及遵循模板的字典表(至少具有字段 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/

相关文章:

abap - 通过 Web 服务上传 DMS 文档

dynamic - 如何在仅引用数据的表中循环

abap - abap删除相邻的重复项

java - liquibase 3.5.X 找不到具有相对路径的 includeAll 的任何文件

php - 如何使用php在数据库中插入动态添加的表单字段

php - MySQL从html数据或PHP中提取明文?

c - 好的数据库与 C 库?

java - 我的 Java 程序 20-30 分钟后 CPU 使用率达到 80%

sockets - ABAP Websocket 服务器 XSRF token

forms - 子程序中 FORM-ENDFORM 中的异常捕获