什么是 SAP CDS view 的 join on demand 技术

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

如下图所示:
什么是 SAP CDS view 的 join on demand 技术_第1张图片

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实体:

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来连接SalesOrderCustomer

@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来定义SalesOrderCustomer之间的连接。关键是,我们在连接上使用了[0..1],这表示在查询时仅在需要时才执行连接操作,而不是立即执行。这就是Join on demand的关键部分。

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

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

你可能感兴趣的:(什么是 SAP CDS view 的 join on demand 技术)