【问题标题】:How are ABAP data clusters stored in the database?ABAP数据集群如何存储在数据库中?
【发布时间】:2012-12-16 13:22:59
【问题描述】:

可以使用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.000.000 条唯一记录导致 @ 中只有 1.703 条记录987654332@表)。在export 语句上设置compression off 确实增加了记录的数量,但仍然少很多。

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

【问题讨论】:

  • 您需要直接访问什么?
  • 我不需要访问权限,我只是好奇它是如何工作的。

标签: database abap


【解决方案1】:

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

【讨论】:

  • “何必呢?” - 用于批量处理。如果您处理大量项目(10k+),在循环中使用语言语句会变得非常慢。也许没有办法,但确实值得尝试找到一个批量处理选项。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-07-14
  • 2016-07-19
  • 2015-02-17
  • 1970-01-01
  • 2011-04-06
  • 1970-01-01
  • 2015-01-19
相关资源
最近更新 更多