SAP 工具箱复制视图内容到表中

作者:ABAP技巧与实战 约 5 分钟阅读 更新日期:2025-03-02 1 年前更新 标签:ABAP, Basis, Data Engineering, 开发, 数据工程, 系统管理
SAP 工具箱复制视图内容到表中 - 封面图
SAP 工具箱复制视图内容到表中 - 封面图

原创 无峰 [ ABAP 技巧与实战 ](javascript:void\(0\);)

前言

基于HANA的内存数据库的强大性能, SAP建议把业务逻辑下沉到HANA中计算.以便减去应用服务器的负担,让程序性能更好一些.

业务逻辑下沉到HANA一般的方式是使用视图搭建数据模型来实现相关业务逻辑,

• HANA视图(HANA工作台中的可视化视图工具,也可以通过SQL语句创建)

• CDS视图

当视图模型结构过于复杂时,视图本身的性能就会变差,如果在执行一个大量运算时,需要频繁读取视图的内容. 此时把视图写入到物理表(数据落地)会极大的优化性能

**本文主要介绍视图内容写入物理表的一个小应用**

SAP 工具箱复制视图内容到表中 - 封面图
SAP 工具箱复制视图内容到表中 - 封面图

HANA环境

HANA数据库中复制数据最快捷的方式

通过查询创建表

create column table zts_table as ( select * from ZDDL_ZPUHM )

通过查询写入表

INSERT INTO zts_table SELECT * FROM ZDDL_ZPUHM

但这样创建的表,通过SE11无法查看,因此ABAP中无法使用该表.

几个思虑

1. 视图中的数据关键字是什么? 确保视图数据不重复的字段是哪几个, 表需要用这几个字段创建关键字, 确保写入表后数据不会丢失.如果不想考虑这个问题, 则可以考虑使用GUID或记录号作为表的关键字.

2. 数据量过大时的分包处理

3. 复制的间隔.表需要每天复制一次就好? 还是需要使用时立即复制?

小工具

基于上述的思虑,开发了一个简单的类ZCL_COPY_TABLE.专门用来处理视图到表的复制,使用很简单. 如图一

其中ZSTABLE_COPY的结构字段如下 图二

• TABNAME_ORI 源表名(或视图)

• TABNAME_TAR 目标表名

• PACKAGE_NUM 每个包的条目数(大量数据读取时,每个包读取的条目数,0表示一次性读取)

• SAME_FIELDS 字段完全相同标记(如未标记,使用MOVE-CORRESPONDING 复制同名字段)

• INTERVAL 间隔方式

1. D按天检查(检查是否又当天的复制)

2. I按时间间隔检查,检查上次复制距离当期的秒数

3. R不检查,直接执行

• SECONDS间隔检查的秒数

• FNAME_KEY表内容复制的唯一关键字的字段名(确保视图数据全部写入表中)

通过日志表 ZTCOPY_TABLE_LOG 如图三 记录表复制操作的日志, 该日志表也用于间隔检查.

SAP 工具箱复制视图内容到表中 - 封面图
SAP 工具箱复制视图内容到表中 - 封面图

图一

SAP 工具箱复制视图内容到表中 - 封面图
SAP 工具箱复制视图内容到表中 - 封面图

图二

SAP 工具箱复制视图内容到表中 - 封面图
SAP 工具箱复制视图内容到表中 - 封面图

图三

可能的改进

写文章的时候查了一个新的ABAP INSERT 语法.

新的语法支持使用

INSERT

FROM ( SELECT * FROM)

该语句会被解析成HANA中的相应语句, 性能优于传统的先读取到内表,再从内表写入目标表的方式,也不会有内存压力. 后续可以考虑应用该语句优化这个类

SAP 工具箱复制视图内容到表中 - 封面图
SAP 工具箱复制视图内容到表中 - 封面图

总结

复杂视图的内容落地(保存到表中),使用表代替后续多次访问内容及参与其他表连接,有时候可以极大的优化后续的SQL语句性能.

在这个小工具中考虑了视图逻辑的一些常见的场景. 使用比较方便.

类的源码较长. 需要的同学可以在公众号中回复如下关键字获取

复制视图

ABAP技巧与实战

关于作者:ABAP技巧与实战

企业信息化与 SAP 技术顾问,长期专注 SAP ABAP、FI/CO、MM、SD 等模块的技术分享与实战经验总结。查看更多介绍

来源说明:本文内容由「SAP工具箱复制视图内容到表中.md」整理生成,仅用于内部技术分享与学习交流。