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

前言

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

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

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

  • CDS视图

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

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

c616f6233a145242fd5a03e888751601.png

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 如图三 记录表复制操作的日志, 该日志表也用于间隔检查.

d5340bcd9ca75f13530dec6abe43f63e.png

图一

a8c5b44c454bfc45f7931d8ed57dfa5b.png

图二

f4d2cab095377fe418972ca0a1529f89.png

图三

可能的改进

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

新的语法支持使用

INSERT

FROM ( SELECT * FROM)

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

b84bd1c25683a6980364ed12c0d513ed.png

总结

复杂视图的内容落地(保存到表中),使用表代替后续多次访问内容及参与其他表连接,有时候可以极大的优化后续的SQL语句性能. 在这个小工具中考虑了视图逻辑的一些常见的场景. 使用比较方便.

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

复制视图

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值