优化数据加载
学习目标
实施 SAP HANA 优化的转换
SAP HANA 优化的转换规则
在 SAP BW/4HANA 中引入转换
自从引入 SAP HANA 作为为 SAP BW 提供支持的数据库以来,转换处理已越来越多地下推到 SAP HANA,以实现最优的基于 SQL 的处理。只要有可能,选定的操作就会被下推,但许多无法转换为 SQL 的操作不得不留在 ABAP 运行时中。而现在,借助 SAP BW/4HANA,转换达到了新的下推水平,几乎所有基本操作现在都在 SAP HANA 运行时中处理。
转换通常既可以在 SAP HANA 运行时中执行,也可以在 ABAP 运行时中执行,具体取决于所使用的功能集。默认情况下,SAP HANA 运行时是预定义的那一个。在激活过程中,SAP BW/4HANA 应用程序会下推所有处理对象,并生成所需的 SAP HANA 制品。然而,以下规则类型会阻止 SAP HANA 运行时,并强制使用 ABAP 运行时:
转换的公式编辑器中的客户定义函数。
字段例程、开始例程或专家例程中的 ABAP 编码。 结束 例程是一个例外,因为即使仅在结束例程中定义了 ABAP 编码,转换实际上仍可以应用 SAP HANA 运行时。严格来说,这种场景可称为 部分 SAP HANA 运行时 ,因为两种运行时被组合在一起:首先所有开始逻辑和字段逻辑在 SAP HANA 侧处理,然后结果被传输到 ABAP 应用服务器以应用结束例程逻辑,之后结果再被传输回 SAP HANA 数据库。
如果满足这两个条件之一,转换会自动更改为 ABAP 运行时,并在激活期间生成一个 SAP ABAP 程序。
在 SAP BW/4HANA 中,您在 BW 建模工具中创建和编辑转换。数据仓库工作台(事务 RSA1)中的维护已不再可用。引入了以下调整:
运行时:SAP HANA 运行时与 ABAP 运行时。
注意
执行的运行时不再像使用由 SAP HANA 提供支持的 SAP BW 7.5 那样可以在数据传输进程中设置。相反,它是转换的一个参数。
在 DTP 中,原名为 Semantic Key for Grouping 的功能已重命名为 Extraction Grouped By:借此您可以选择构成语义键的源字段。随后,指定键的所有记录会被合并到一个数据包中一起处理。
在 DTP 中,现在使用**数据传输中间存储(DTIS)**而非原先的错误堆栈来管理错误处理。例如,您可以调用 DTIS 维护来更正其中的记录。有关更多详细信息,请参阅 SAP 注释 3037467(DTIS 概览与重要说明)。
ABAP 运行时与 SAP HANA 运行时
SAP ABAP 运行时中的 SAP BW/4HANA 转换将数据逐包地从 SAP HANA 数据库对象加载到 SAP BW/4HANA ABAP 应用层的内存中,以便进一步处理。转换逻辑随后在应用服务器内执行,转换后的数据包被送回到数据库服务器。数据库服务器将结果数据包写入目标数据库对象。在基于 ABAP 的转换处理期间,源数据包会被逐行处理。基于 ABAP 的处理允许定义基于字段的规则,这些规则按顺序处理步骤执行。最终,整体运行时是数据库与应用服务器之间两次数据传输的组合。这种处理方式导致应用程序逻辑与数据管理之间形成清晰的经典区分。
使用 SAP HANA 运行时时,数据转换逻辑在 SAP HANA 数据库内执行。转换逻辑并不从数据库读取数据、在应用服务器中处理转换逻辑、再把转换后的数据写回数据库,而是反映在一个 SAP HANA CalcScenario 中。该 CalcScenario 在转换激活过程中生成,位于 SAP ABAP 层的源 InfoProvider 之上,并遵循严格的命名约定:TR_<< Program ID for Transformation (Generated)>>,它不能被显式创建或修改。
HANA CalcScenario 在表 RSTRAN 中管理,可以在事务 RSDHATR 中显示。在此界面中,只有当专家模式打开时(选择 Extras→Export Mode On/Off),CalculationScenario 选项卡才可见。该选项卡显示相应 HANA CalcScenario 的技术定义,其中包括转换逻辑和 SQLScript 过程。
HANA CalcScenario 被嵌入到一个 SAP HANA 列视图中。执行 DTP 时,它会基于该列视图创建 SQL SELECT 语句,并从源 InfoProvider 中选择所有必需的数据。在此过程中,CalcScenario 中定义的所有转换逻辑都会应用到所选源数据上,然后结果才被写入目标 InfoProvider。
通过将转换逻辑转移到 SAP HANA CalcScenario 中,数据在单个处理步骤内直接从源对象传输到目标对象。从技术上讲,这是通过 INSERT AS SELECT SQL 语句实现的,该语句从列视图读取并将结果插入到转换的目标数据库对象中。这消除了数据库服务器与应用服务器(ABAP)之间昂贵的数据传输,因为完整处理都在 SAP HANA 内部进行。
这种方法的好处是双重的:第一,数据不必在应用服务器与数据库服务器之间来回传输。第二,转换逻辑可以利用 SAP HANA 数据库的全部 CPU 能力和并行性。性能提升的程度取决于若干因素,例如读取和写入的数据量、所需逻辑的性质以及可能的并行度。结果证实了性能提升,但在某些情况下,尤其是数据量相当小时,性能提升可能可以忽略不计。
SAP HANA 运行时:ABAP 托管数据库过程(AMDP)
在 SAP BW/4HANA 中,HANA SQL Script(ABAP 托管数据库过程 AMDP)可用于字段脚本、开始脚本、结束脚本或专家脚本。系统会为数据加载过程生成原生 SAP HANA 编码,并提供与 SAP BW/4HANA 调度、监控、传输管理等功能的完全集成。
ABAP 运行时与 SAP HANA 运行时的差异
转换运行时的设置可在 BW 建模工具中转换建模界面的常规选项卡上找到。SAP HANA 运行时比 ABAP 运行时提供更好的性能,海量数据可以在那里非常快速地处理。然而,SAP HANA 运行时使用起来更为复杂。两种运行时模式之间存在本质差异,这可能导致不同的结果。这意味着当您使用 SAP HANA 运行时时,应仔细对照预期结果验证实际结果,尤其是在要替换现有 ABAP 转换时。下面描述运行时之间的一些典型差异:
在许多情况下,SAP HANA SQL 脚本的复杂度高于 ABAP 例程中的对应解决方案。因此,您应仔细评估要使用哪种运行时,并考虑易用性、工作量和维护工作量。SAP 建议尽可能使用公式,因为大多数公式可在两种运行时中使用,并且更易于维护。只有当您无法将您的场景映射到现有公式集时,才应使用客户编码。
在 SAP ABAP 运行时中,ABAP 支持的类型会被自动转换,因此例如在运行时字段包含数字时,字符字段的值可以轻松写入整数字段。SAP HANA 运行时则不是这样:如果您未在公式或 SAP HANA 脚本中显式指定类型转换,就会发生错误。另请参阅 SAP 注释 2800346(Consulting: Handling of fields with conversion exits in AMDP routines)。
在 SAP HANA 运行时中,计算结果会按小数位截断,而不会四舍五入。另请参阅 SAP 注释 2627044(Different results for Formulas during HANA Execution and ABAP Execution)。
为确保在复杂场景中具有更高的稳定性,SAP HANA 运行时的错误处理已经过根本性修订。另请参阅 SAP 注释 2580109(Error handling in BW Transformations and data transfer processes in SAP HANA runtime)。
具有多个转换的堆叠数据流
下推选项并不局限于只有一个转换的数据流。通过 InfoSource 组合转换是一种已知做法,也被称为 SAP BW 堆叠数据流。SAP 建议最多堆叠三个转换,以确保从下推中获得最佳性能收益。
一般来说,“堆叠数据流”是 SAP BW 中的一种流程,其中多个转换通过 InfoSource 组合在一起。如果满足以下条件,堆叠数据流中支持混合的转换运行时:
运行时之间的切换只发生一次
ABAP 运行时位于堆叠数据流的末尾
与没有 InfoSource 作为源或目标对象的转换一样,这里的处理模式在单个转换中定义,最终这些运行时的整体组合形成最终的执行路径。如果满足某些条件,该路径可以下推到 SAP HANA:
如果所有转换都支持 SAP HANA 运行时,则完整流程可以在 SAP HANA 中执行。
如果组合的转换中存在运行时的混合,那么您只能切换运行时一次,且只能从 SAP HANA 切换到 SAP ABAP。因此,ABAP 运行时中的转换必须位于数据流的末尾。这就解释了为什么单个转换可以保持 SAP HANA 运行时,尽管其中有一个 ABAP 结束例程。
为说明上述条件,让我们列举一些堆叠数据流的典型场景,这些场景不受支持:
场景 1:如果 ABAP 运行时不在数据流末尾,或者运行时被切换超过一次,那么 DTP 激活会失败并出现上述错误。这意味着您实际上可以用转换和 InfoSource 建模此场景,但无法执行它,因为无法创建 DTP(另请参阅 SAP 注释 2799699)。因此遗憾的是,错误会在建模过程相当晚的阶段才出现。
场景 2:在 SAP HANA 转换中创建 ABAP 结束例程的选项不适用于使用 InfoSource 作为目标对象的对象(请参阅 SAP 注释 2987230)。
如果转换处理模式设置为 SAP ABAP,则堆叠数据流中使用的 InfoSource 可用于在数据流内聚合数据。如果处理模式为 SAP HANA,则数据不会按 InfoSource 设置中的配置进行聚合。这是因为基于 SAP HANA 的转换不知道处理类型。因此,您不会收到关于 InfoSource 聚合行为的警告消息。另请参阅 SAP 注释 2541540 和 2968024。
SAP HANA 优化的转换:最佳实践
在将转换更改为 SAP HANA 运行时之前,请考虑以下建议(主要描述于 SAP 注释 2057542(Recommendation: Usage of HANA-based Transformations)):
如果切换到 SAP HANA 运行时没有获得显著(且关键的)处理时间收益,就没有理由这样做。
SAP 建议在转换中使用公式,因为大多数公式都可以下推到 SAP HANA。
注意
另请参阅 SAP 注释 3072196(BW Transformation formula availability in SAP BW/4HANA)和 2423215(Non Supported Formulas in HANA Transformations
SAP 建议使用其他标准接口,例如主数据或 ADSO 中的查找,而不是编写自定义 ABAP/HANA 代码。
SAP HANA 运行时是一种替代模式,而不是当前模式的替代品。经典的基于 ABAP 的执行模式在未来也会继续工作、会得到支持,并将迎来更多改进和新功能。
注意
SAP 注释 2603241:关于使用 SAP HANA 和 ABAP 执行的 BW 转换上下文中最重要的 SAP 注释的概览与摘要。
作为支持包实施的替代方案,您也可以使用 SAP BW Note Analyzer 来应用所引用注释的列表,您将在本次学习之旅的后续内容中了解它。
注意
有关更多信息,请参阅以下来源:
SAP 注释 2580109:Error handling in BW Transformations and data transfer processes in SAP HANA runtime
SAP 注释 2432237:Impact handling for Transformations
博客:HANA based BW Transformations:https://community.sap.com/t5/technology-blogs-by-sap/hana-based-bw-transformation/ba-p/13224371
博客:Spotlight on HANA Transformations on ODP Sources: https://community.sap.com/t5/technology-blogs-by-sap/sap-bw-spotlight-on-hana-transformations-on-odp-sources/ba-p/13492994
博客:Renovating ODP Extraction in HANA Runtime starting from SAP BW/4HANA 2021 SP04: https://community.sap.com/t5/technology-blogs-by-sap/sap-bw-4hana-2021-sp04-renovating-odp-extraction-in-hana-runtime/ba-p/13566529
探索转换的运行时设置
观看以下演示,了解如何探索和切换转换的运行时设置。
Demo:Watch Demo(SAP 官方交互式练习)
ABAP 运行时中的例程与 HANA 运行时中的脚本
观看以下演示,了解 ABAP 运行时中的例程与 HANA 运行时中的脚本。
Demo:Watch Demo(SAP 官方交互式练习)
本课其余配图





本课其余配图





本课其余配图





本课其余配图




