什么是 SAP CDS view 的 join on demand 技术
来源:个人图书馆-汪子熙时间:2023-08-14 14:17:52

SAP CDS view 里借助path expression技术,我们可以实现join on demand的场景。


(资料图片)

如下图所示:

Join on demand是SAP CDS (Core Data Services)视图的一个重要特性,它允许您在CDS视图中实现延迟连接,从而优化查询性能。通过在需要时执行连接操作,而不是在每次查询时都执行连接,可以减少数据库的负担,提高查询性能。

在SAP CDS视图中,通常会涉及到多个实体(表)之间的连接操作,例如INNER JOIN、LEFT OUTER JOIN等。在传统的连接方式中,连接操作会在查询开始时立即执行,这可能会导致不必要的开销,特别是在某些查询中可能并不需要连接的情况下。

使用Join on demand特性,可以将连接操作推迟到实际需要时再执行。这意味着如果您的查询不需要连接的数据,连接操作就不会发生,从而提高了查询的效率。

以下是一个简单的示例,演示了如何在SAP CDS视图中使用Join on demand

假设我们有两个实体(表):SalesOrderCustomer。我们希望创建一个CDS视图,显示销售订单信息及其关联的客户信息。我们可以使用Join on demand来实现这一点。

首先,定义SalesOrder实体:

entitySalesOrder{keySalesOrderID:UUID;CustomerID:UUID;OrderDate:Date;//...otherfields};

然后,定义Customer实体:

entityCustomer{keyCustomerID:UUID;Name:String;//...otherfields};

接下来,创建一个CDS视图,使用Join on demand来连接SalesOrderCustomer

@AbapCatalog.sqlViewName:"Z_CDS_SalesOrderWithCustomer"@AccessControl.authorizationCheck:#NOT_REQUIRED@EndUserText.label:"SalesOrderwithCustomer"defineviewSalesOrderWithCustomerasselectfromSalesOrderassociation[0..1]toCustomeras_Customeron$projection.CustomerID=_Customer.CustomerID{keySalesOrder.SalesOrderID,SalesOrder.OrderDate,_Customer.NameasCustomerName};

在上面的代码中,我们使用了association来定义SalesOrderCustomer之间的连接。关键是,我们在连接上使用了[0..1],这表示在查询时仅在需要时才执行连接操作,而不是立即执行。这就是Join on demand的关键部分。

通过这种方式,当我们查询SalesOrderWithCustomer视图时,连接操作将会根据需要来执行,而不会在每次查询时都执行,从而提高了查询性能。

总而言之,Join on demand是SAP CDS视图中的一个重要特性,它通过延迟连接操作的执行来优化查询性能。这在处理大量数据和复杂查询时特别有用,可以减少数据库负担,提高查询效率。通过合理使用Join on demand,您可以在CDS视图中实现更高效的数据模型和查询。

关键词: