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
:
假设我们有两个实体(表):SalesOrder
和Customer
。我们希望创建一个CDS视图,显示销售订单信息及其关联的客户信息。我们可以使用Join on demand
来实现这一点。
首先,定义SalesOrder
实体:
entity SalesOrder {
key SalesOrderID : UUID;
CustomerID : UUID;
OrderDate : Date;
// ... other fields
};
然后,定义Customer
实体:
entity Customer {
key CustomerID : UUID;
Name : String;
// ... other fields
};
接下来,创建一个CDS视图,使用Join on demand
来连接SalesOrder
和Customer
:
@AbapCatalog.sqlViewName: 'Z_CDS_SalesOrderWithCustomer'
@AccessControl.authorizationCheck: #NOT_REQUIRED
@EndUserText.label: 'Sales Order with Customer'
define view SalesOrderWithCustomer as select from SalesOrder
association [0..1] to Customer as _Customer on $projection.CustomerID = _Customer.CustomerID
{
key SalesOrder.SalesOrderID,
SalesOrder.OrderDate,
_Customer.Name as CustomerName
};
在上面的代码中,我们使用了association
来定义SalesOrder
和Customer
之间的连接。关键是,我们在连接上使用了[0..1]
,这表示在查询时仅在需要时才执行连接操作,而不是立即执行。这就是Join on demand
的关键部分。
通过这种方式,当我们查询SalesOrderWithCustomer
视图时,连接操作将会根据需要来执行,而不会在每次查询时都执行,从而提高了查询性能。
总而言之,Join on demand
是SAP CDS视图中的一个重要特性,它通过延迟连接操作的执行来优化查询性能。这在处理大量数据和复杂查询时特别有用,可以减少数据库负担,提高查询效率。通过合理使用Join on demand
,您可以在CDS视图中实现更高效的数据模型和查询。