SAP ABAP CDS view 里 INNER JOIN 和 Association 的区别

news2024/11/27 12:52:17

最近有朋友在我的知识星球里向我提问,SAP ABAP CDS view 的 INNER JOIN 和 Association 的功能可以理解为一样吗?

(关于加入我的知识星球的方式,请移步本文文末)

本文就来聊一聊这个话题。既然 CDS view 里同时支持了 INNER JOIN 和 Association 两种操作,那说明二者必然存在一些差异。

首先创建一个包含 INNER JOIN 的 CDS view,将 sflight 和 spfli 两张表通过共同的 carrid 字段连接在一起,sqlViewName 取名为 ZJERRYCDSJ.

这个 CDS view 将 sflight 的三个字段和 spfli 数据库表的两个字段 airpfrom 和 airpto 暴露给消费者。

然后我们用下面这条 ABAP 语句从 CDS view 里仅仅读取来自 sflight 数据库表的两个字段。

DATA: lt_data TYPE TABLE OF ZJERRY_CDS_VIEW_JOIN.

SELECT carrid, connid INTO CORRESPONDING FIELDS OF TABLE @lt_data FROM zjerry_cds_view_join.

我们开启 ST05 跟踪模式,执行上面的报表,查看生成的 SQL trace,通过 sqlViewName 指定为 ZJERRYCDSJ,即可定位到访问 CDS view 的那条 SQL 语句。

我们在 ST05 事物码里选择 Edit->Display Execution Plan->For Recorded Statement,即可查看到上面那条 SQL 语句在运行时的执行计划:

执行计划如下图所示:

绿色区域的 FDA READ,意思是快速数据访问 (Fast Data Access,缩写为 FDA),这是一种在 SAP ABAP 环境中进行数据读写访问的协议。它针对 SAP HANA 为 OPEN SQL SELECT 等语句执行时提供了专门的优化。在快速数据访问场景里,SAP ABAP 内表的数据通过一种特殊的方式传输到数据库,处理完毕后返回应用层。FDA 避免了按字段级别(field-wise)进行 ABAP 数据复制和数据格式转换的额外开销,减少资源利用率以提高应用性能。

FDA 从 SAP ABAP 内核 7.42 版本引入,对于一般的 ABAP 开发人员来说是透明的,仅仅能够在 ST05 Execution 里观察到。

上图的执行计划里,我们在 SELECT 语句里只访问了来自 sflight 表的 carrid 和 connid 两个字段,但是从执行计划的蓝色区域能观察到,sflight 和 spfli 的数据库表 INNER JOIN 仍然发生了。

我个人把这种行为称为 Eager Join(贪婪 Join),类似 Angular Feature Module 的 Eager Load(贪婪加载)。

在 Eager Join 的场景下,表 Join 一定会发生,无论被 Join 的表的字段在当前事务里是否会被读取,这造成了不必要的性能开销。在 Angular Feature Load 场景里,以 Cart Feature Module(功能模块) 为例,如果采取默认的贪婪加载机制,那么用户即使只是在页面随便浏览一下商品,购物车模块也会被浏览器加载,这影响了电商页面的首屏加载时间。

Eager 的反义词当然就是 Lazy,Lazy Load 就是懒加载,延时加载,按需加载。将 Cart Feature Module 配置成 Lazy Load,其表现形式就是直到用户点击添加到购物车按钮,或者直接点击右上角的购物车图标后,才会从浏览器里看到 Cart 功能模块的加载。

同理,CDS view 的 Association 能实现 Lazy Join.

我们使用下图的代码,创建一个 CDS view,通过 Association,将表 SFLIGHT 和 SPFLI 连接起来。乍一看,实现的功能和之前通过 Join 开发的版本没有任何区别。

我们编写一段 ABAP 代码来消费这个 CDS view.

在这段 ABAP 代码里,只读取 sflight 数据库表的 carrid 和 connid 两个字段。

DATA: lt_data TYPE TABLE OF ZJERRY_CDS_VIEW_ASS.

SELECT carrid, connid INTO CORRESPONDING FIELDS OF TABLE @lt_data FROM zjerry_cds_view_ass.

从 ST05 的 Trace 中,我们看不到 spfli 被 Join 的迹象。

将 ABAP 报表稍作修改,不仅读取 sflight 数据库表的字段,而且通过 CDS view 里的名为 _flight 的 Association,读取通过 Association 关联的另一端 spfli 表的 airpfrom 和 airpto 字段。

最后在 ST05 Trace 里,能观察到此时 spfli 数据库表确实通过 LEFT OUTER JOIN 同 sflight 建立了连接。

如果大家知道更多关于 CDS view INNER JOIN 和 Association 的区别,请在文章下留言。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/85875.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

小伙伴因 unshift 插入数据被批,未曾想到找我诉苦竟梅开二度

背景 事情是这样的,今天小伙伴跟我诉苦,说写的代码被批了,原因是效率太低了,简单问了一下需求,就是将几千条数据倒序插入到数组中,他是通过循环搭配 unshift 实现的,听完我也批了他一顿。 小伙…

ImageNet

标题有点不太对是的 就能用了 这次是说 用有噪声的学生网络进行自我训练提高ImageNet分类 近年来,深度学习在图像识别方面取得了显著的成功。然而,最先进的视觉模型仍然是用监督学习来训练的,这就需要大量的标记图像才能很好地工作。 通过只…

监控易火星版纳管IPv6:IP地址管理V2.0的进化之路

IPv6的使用,不仅能解决网络地址资源数量的问题,而且也解决了多种接入设备连入互联网的障碍。大量IP地址的接入,导致运维人员不得不投入大量精力来解决IP管理分散、非法接入、IP地址错误、IP地址冲突等导致的问题。随之而来的,IP地…

java计算机毕业设计基于安卓Android的校园助手APP

项目介绍 网络的广泛应用给生活带来了十分的便利。所以把校园助手与现在网络相结合,利用java技术建设校园助手APP,实现校园助手的信息化。则对于进一步提高校园助手发展,丰富校园助手经验能起到不少的促进作用。 校园助手APP能够通过互联网得到广泛的、全面的宣传,让尽可能多的…

Metal每日分享,图像单色滤镜效果

本案例的目的是理解如何用Metal实现图像单色效果滤镜,将图像转换为单色版本,根据每个像素的亮度进行着色; Demo HarbethDemo地址 实操代码 // 去雾效果滤镜 let filter C7Monochrome.init(intensity: 0.83, color: .blue)// 方案1: Image…

Zookeeper[1]-Zookeeper介绍与安装以及集群环境准备

Java 是第一大编程语言和开发平台。它有助于企业降低成本、缩短开发周期、推动创新以及改善应用服务。如今全球有数百万开发人员运行着超过 51 亿个 Java 虚拟机,Java 仍是企业和开发人员的首选开发平台 课程内容的介绍 Zookeeper的介绍和安装 Zookeeper客户端使用…

基于Paddle2.4.0训练报错Debug

基于Paddle2.4.0训练报错Debug一、环境简介二、Debug过程错误一Debug错误二Debug错误三Debug更换PaddlePaddle版本三、总结参考文档一、环境简介 本文背景为使用AutoDL网站的租借显卡进行网络训练,训练环境如下: 操作系统:Ubuntu18.04&#…

Springboot内置的工具类之StringUtils

在实际的业务开发中,除了经常有针对对象的判断或操作以外,经常也会遇到的就是字符串的判断和操作。比如判断字符串是否为空、是否以某个字符结尾、去除头部和尾部的空白字符、字符的查找和替换。在Spring的核心包中存在这样一个类org.springframework.ut…

如何保证项目如期上线,测试工程师应该怎么做?

要保证项目按照正常进度发布,需要整个研发团队齐心协力。 有很多原因都可能会造成项目延期。1、产品经理频繁修改需求2、开发团队存在技术难题3、测试团队测不完今天我想跟大家聊一下,测试团队如何保证项目按期上线,以及在这个过程中可能遇到…

[附源码]Python计算机毕业设计SSM基于Web课堂签到管理系统(程序+LW)

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

学生HTML网页作业:基于HTML+CSS+JavaScript画家企业8页

🎉精彩专栏推荐 💭文末获取联系 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 💂 作者主页: 【主页——🚀获取更多优质源码】 🎓 web前端期末大作业: 【📚毕设项目精品实战案例 (10…

jvm垃圾处理

1.什么是垃圾 垃圾:没有引用指向的一个对象或者多个对象循环引用但是没有引用指向申请内存方式 c语言:malloc free c:new delete java:new 对象 2、垃圾是如何产生的 垃圾一般在发生引用传递时产生。一块堆内存可以被不同的栈内存所引用,…

DBCO-PEG-SPDP,SPDP-PEG-DBCO,DBCO-聚乙二醇-3-(2-吡啶二硫代)丙酸N-羟基琥珀酰亚胺

一、试剂基团反应特点(Reagent group reaction characteristics): DBCO-PEG-SPDP中无铜点击反应一直是无催化剂生物共轭的有力工具。 DBCO试剂在水性缓冲液中具有稳定性,可用于以高特异性和反应性标记叠氮化物修饰的生物分子&…

【知识图谱】(task3)知识图谱的存储和查询

note 用图数据库的场景: 高性能关系查询:需要快速遍历许多复杂关系的任何用例,如欺诈检测,社交网络分析,网络和数据库基础设施等;模型的灵活性:任何依赖于添加新数据而不会中断现有查询池的用例…

Linux Kernel 6.0 CXL Core Regs.c 详解

前言 CXL 是一个比较新的技术,所以我研究的内核源码是选了当前比较新的内核版本 linux 6.0。打算将内核关于 CXL 的驱动进行解析一遍,一步一步慢慢来。 在阅读之前,希望读者能有一定的 PCIe 基础知识,精力有限,不能把…

C++ 不知算法系列之聊聊希尔、归并排序算法中的分治哲学

1. 前言 排序算法中,冒泡、插入、选择属于相类似的排序算法,这类算法的共同点:通过不停地比较,再使用交换逻辑重新确定数据的位置。 希尔、归并、快速排序算法也可归为同一类,它们的共同点都是建立在分治思想之上。把…

Linux基本工具——gcc/g++与make/Makefile

Linux编译器,项目构成工具gcc/g程序翻译过程选项的含义动态链接静态链接如何识别静态链接和动态链接Linux项目自动化构建工具——make/Makefilemake/Makefile是什么make/Makefile的使用伪目标make/makefile推导过程gcc/g 程序翻译过程 预处理(去掉注释…

当了10年程序员,我开窍了

有人说,程序员的高收入和工作年限成正比,认为自己的薪资应该如此计算: private static boolean 计算工资() { //years工作时长(年) int years 5; while(years-- > 0){ 做项目(); 团建活动(); 涨工资(); 拿年终奖(); } return 跳槽() &…

12、后渗透测试--meterpreter使用

Post后渗透模块&#xff1a;在meterpreter > 中我们可以使用以下的命令来实现对目标的操作。一、基本系统命令 sessions # sessions –h 查看帮助sessions -i <ID值> # 进入会话 -k 杀死会话background # 将当前会话放置后台info # 查看已有模块信息getuid …

CSS之段落样式

1、文本缩进 标签&#xff1a;text-indent &#xff08;indent v. 缩进&#xff09;含义&#xff1a;首行缩进和字体大小有关&#xff1a;1个em等于一个字体大小 2、文本对齐方式 标签&#xff1a;text-align (align v. 调整&#xff0c;使一致)种类&#xff1a;左对齐、右对…