与 SAP 集成

本页介绍了在 Cortex Framework Data Foundation 中集成 SAP 运营工作负载(SAP ECC 和 SAP S/4 HANA)的步骤。Cortex Framework 可以使用预定义的数据处理模板,通过 Dataflow 流水线将 SAP 数据与 BigQuery 集成,从而加快集成速度,而 Cloud Composer 会调度和监控这些 Dataflow 流水线,以便从 SAP 运营数据中获取数据洞见。

Cortex Framework Data Foundation 代码库中的 config.json 文件用于配置从任何数据源(包括 SAP)传输数据所需的设置。此文件包含以下适用于 SAP 运营工作负载的参数:

  "SAP": {
        "deployCDC": true,
        "datasets": {
            "cdc": "",
            "raw": "",
            "reporting": "REPORTING"
        },
        "SQLFlavor": "ecc",
        "mandt": "100"
    }

下表介绍了每个 SAP 运营参数的值:

参数 含义 默认值 说明
SAP.deployCDC 部署 CDC true 生成 CDC 处理脚本,以便在 Cloud Composer 中作为 DAG 运行。
SAP.datasets.raw 原始着陆数据集 - 由 CDC 进程使用,复制工具会将来自 SAP 的数据放置在此处。如果使用测试数据,请创建空数据集。
SAP.datasets.cdc CDC 处理后的数据集 - 用作报告视图的来源以及已处理记录 DAG 的目标位置的数据集。如果使用测试数据,请创建空数据集。
SAP.datasets.reporting 报告数据集 SAP "REPORTING" 最终用户可用于报告的数据集的名称,其中部署了视图和面向用户的表。
SAP.SQLFlavor 源系统的 SQL 方言 "ecc" s4ecc。 对于测试数据,请保留默认值 (ecc)。
SAP.mandt Mandant or Client "100" SAP 的默认 mandant 或客户端。 对于测试数据,请保留默认值 (100)。
SAP.languages 语言过滤器 ["E","S"] 要用于相关字段(例如名称)的 SAP 语言代码 (SPRAS)。
SAP.currencies 币种过滤条件 ["USD"] 用于货币换算的 SAP 目标币种代码 (TCURR)。

虽然没有最低 SAP 版本要求,但 ECC 模型是在当前最早受支持的 SAP ECC 版本上开发的。无论版本如何,我们的系统与其他系统之间的字段差异都是预期之内的。

数据模型

本部分使用实体关系图 (ERD) 介绍了 SAP(ECC 和 S/4 HANA)数据模型。

SAP ECC

SAP ECC 的实体关系图

图 2。SAP ECC:实体关系图。

SAP S/4 HANA

SAP S/4 HANA 的实体关系图

图 2。SAP S/4 HANA:实体关系图。

基本视图

这些是 ERD 中的蓝色对象,是 CDC 表的视图,除了某些列名别名之外,没有其他转换。请参阅 src/SAP/SAP_REPORTING 中的脚本。

报告数据视图

这些是 ERD 中的绿色对象,包含报告表使用的相关维度属性。请参阅 src/SAP/SAP_REPORTING 中的脚本。

实用视图或 BQML 视图

这些是 ERD 中的黄色对象,包含用于数据分析和报告的特定联接事实和维度视图类型。请参阅 src/SAP/SAP_REPORTING 中的脚本。

其他标记

此 ERD 中的彩色标记表示报告表的以下特征:

标记 颜色 说明
L 黄色 此标记是指用于指定数据存储或显示语言的数据元素或属性。
S/4 红色 此标记表示特定属性是 SAP S/4 HANA 特有的(此对象可能不在 SAP ECC 中)。
MANDT 紫色 此标记表示特定属性包含 MANDT 参数(表示客户或客户 ID),用于确定特定数据记录属于哪个客户或公司实例。
EXT 红色 此标记表示特定对象由 DAG 或外部数据集填充。这意味着,标记的实体或表不会直接存储在 SAP 系统本身中,但可以使用 DAG 或其他机制提取并加载到 SAP 中。
T 紫色 此标记表示将使用配置的 DAG 自动实现特定属性。
S 红色 此标记表示实体或表格中的数据受多种币种的影响。

SAP 复制的前提条件

请考虑以下前提条件,以便使用 Cortex Framework Data Foundation 复制 SAP 数据:

  • 数据完整性:Cortex Framework Data Foundation 要求复制的 SAP 表具有与 SAP 中相同的字段名称、类型和数据结构。只要复制的表与源表具有相同的格式、字段名称和粒度,就无需使用特定的复制工具。
  • 表命名:BigQuery 表名必须以小写字母创建。
  • 表配置:SAP 模型使用的表列表可在 CDC(变更数据捕获)cdc_settings.yaml 文件中查看和配置。 如果在部署期间未列出某个表,则依赖于该表的模型会失败,但其他非依赖模型会成功部署。
  • BigQuery Connector for SAP 的具体注意事项
    • 表格映射:如需了解转化选项,请参阅默认表格映射文档
    • 停用记录压缩:我们建议停用 记录压缩,这可能会影响 Cortex CDC 层和 Cortex 报告数据集。
  • 元数据复制:如果您在部署期间不部署测试数据和生成 CDC DAG 脚本,请确保将 SAP 元数据的表 DD03L 从源项目中的 SAP 复制过来。此表包含有关表的元数据,例如键列表,并且是 CDC 生成器和依赖项解析器正常运行所必需的。 您还可以通过此表添加模型未涵盖的表(例如自定义表或 Z 表),以便生成 CDC 脚本。
  • 处理细微的表名称差异:如果表名称存在细微差异,某些视图可能会因找不到必需字段而失败,因为 SAP 系统可能会因版本或插件而存在细微差异,或者某些复制工具对特殊字符的处理方式可能略有不同。我们建议使用 turboMode : false 执行部署,以便一次性发现大多数故障。常见问题包括:

    • _ 开头的字段(例如 _DATAAGING)会移除 _
    • 在 BigQuery 中,字段不能以 / 开头。

    在这种情况下,您可以调整失败的视图,以选择复制工具放置的字段。

从 SAP 复制原始数据

数据基础层的目的是公开数据和分析模型,以用于报告和应用。这些模型会使用首选复制工具(例如适用于 SAP 的数据集成指南中列出的工具)来使用从 SAP 系统复制的数据。

来自 SAP 系统(ECC 或 S/4 HANA)的数据以原始形式复制。数据直接从 SAP 复制到 BigQuery,而不会对其结构进行任何更改。它本质上是 SAP 系统中表的镜像。BigQuery 使用小写表名称作为其数据模型。因此,即使您的 SAP 表可能具有大写名称(例如 MANDT),它们在 BigQuery 中也会转换为小写名称(例如 mandt)。

变更数据捕获 (CDC) 处理

选择 Cortex Framework 为复制工具提供的以下任一 CDC 处理模式,以便从 SAP 加载记录:

  • 始终附加:在记录中插入每次更改,并附带时间戳和操作标志(插入、更新、删除),以便识别最新版本。
  • 着陆时更新(合并或更新插入):在 change data capture processed 中着陆时创建记录的更新版本。它在 BigQuery 中执行 CDC 操作。

Cortex Framework Data Foundation 支持这两种模式,但对于“始终追加”模式,它提供 CDC 处理模板。某些功能需要在着陆时注释掉以进行更新。例如,OneTouchOrder.sql 及其所有相关查询。此功能可替换为 CDPOS 等表。

CDC 处理

图 1。CDC 处理。

为以“始终附加”模式复制的工具配置 CDC 模板

我们强烈建议您根据自己的需求配置 cdc_settings.yaml 如果商家不需要如此高的数据新鲜度,某些默认频次可能会导致不必要的费用。如果使用以“始终附加”模式运行的工具,Cortex Framework Data Foundation 会提供 CDC 模板,以自动执行更新并在 CDC 处理的数据集中创建最新版本的真实数据或数字孪生数据。

如果您需要生成 CDC 处理脚本,可以使用文件 cdc_settings.yaml 中的配置。如需了解相关选项,请参阅设置 CDC 处理。对于测试数据,您可以将此文件保留为默认值。

根据您的 Airflow 或 Cloud Composer 实例,对 DAG 模板进行所有必需的更改。如需了解详情,请参阅收集 Cloud Composer 设置

可选:如果您想在部署后单独添加和处理表,可以修改 cdc_settings.yaml 文件,以便仅处理所需的表,然后直接重新执行调用 src/SAP_CDC/cloudbuild.cdc.yaml 的指定模块。

设置 CDC 处理

在部署期间,您可以选择使用 BigQuery 中的视图实时合并更改,也可以在 Cloud Composer(或任何其他 Apache Airflow 实例)中安排合并操作。Cloud Composer 可以安排脚本定期处理合并操作。每次执行合并操作时,数据都会更新为最新版本,但更频繁的合并操作意味着更高的费用。根据业务需求自定义安排的频率。如需了解详情,请参阅 Apache Airflow 支持的调度

以下示例脚本显示了配置文件中的摘录:

  data_to_replicate:
    - base_table: adrc
      load_frequency: "@hourly"
    - base_table: adr6
      target_table: adr6_cdc
      load_frequency: "@daily"

此配置示例文件会执行以下操作:

  1. 如果 TARGET_PROJECT_ID.DATASET_WITH_LATEST_RECORDS.adrc 不存在,则从 SOURCE_PROJECT_ID.REPLICATED_DATASET.adrc 创建一个副本到 TARGET_PROJECT_ID.DATASET_WITH_LATEST_RECORDS.adrc
  2. 在指定存储桶中创建 CDC 脚本。
  3. 如果 TARGET_PROJECT_ID.DATASET_WITH_LATEST_RECORDS.adr6_cdc 不存在,则从 SOURCE_PROJECT_ID.REPLICATED_DATASET.adr6 创建一个副本到 TARGET_PROJECT_ID.DATASET_WITH_LATEST_RECORDS.adr6_cdc
  4. 在指定存储桶中创建 CDC 脚本。

如果您想创建 DAG 或运行时视图来处理 SAP 中存在但未在文件中列出的表的更改,请在部署之前将这些表添加到此文件中。只要表 DD03L 在源数据集中复制,并且自定义表的架构存在于该表中,此方法就有效。例如,以下配置会为自定义表 zztable_customer 创建 CDC 脚本,并创建一个运行时视图,以实时扫描另一个名为 zzspecial_table 的自定义表中的更改:

    - base_table: zztable_customer
      load_frequency: "@daily"
    - base_table: zzspecial_table
      load_frequency: "RUNTIME"

生成的模板示例

以下模板会生成变更处理。此时可以修改时间戳字段的名称或其他操作等内容:

  MERGE `${target_table}` T
  USING (
     SELECT *
     FROM `${base_table}`
     WHERE
        recordstamp > (
            SELECT IF(
                MAX(recordstamp) IS NOT NULL,
                MAX(recordstamp),
                TIMESTAMP("1940-12-25 05:30:00+00"))
            FROM `${target_table}` )
  ) S
  ON ${p_key}
  WHEN MATCHED AND S.operation_flag='D' AND S.is_deleted = true THEN
    DELETE
  WHEN NOT MATCHED AND S.operation_flag='I' THEN
    INSERT (${fields})
    VALUES
    (${fields})
  WHEN MATCHED AND S.operation_flag='U' THEN
  UPDATE SET
      ${update_fields}

或者,如果您的业务需要近乎实时的分析洞见,并且复制工具支持此功能,则部署工具接受 RUNTIME 选项。这意味着系统不会生成 CDC 脚本。相反,视图会在运行时扫描并提取最新的可用记录,以实现即时一致性

CDC DAG 和脚本的目录结构

SAP CDC DAG 的 Cloud Storage 存储桶结构要求在 /data/bq_data_replication 中生成 SQL 文件,如以下示例所示。 您可以在部署之前修改此路径。如果您还没有可用的 Cloud Composer 环境,可以稍后创建一个,然后将文件移到 DAG 存储桶中。

with airflow.DAG("CDC_BigQuery_${base table}",
                template_searchpath=['/home/airflow/gcs/data/bq_data_replication/'], ##example
                default_args=default_dag_args,
                schedule_interval="${load_frequency}") as dag:
    start_task = DummyOperator(task_id="start")
    copy_records = BigQueryOperator(
      task_id='merge_query_records',
        sql="${query_file}",
        create_disposition='CREATE_IF_NEEDED',
        bigquery_conn_id="sap_cdc_bq", ## example
        use_legacy_sql=False)
    stop_task = DummyOperator (task_id="stop")
    start_task >> copy_records >> stop_task

在 Airflow 或 Cloud Composer 中处理数据的脚本是有意与 Airflow 特有的脚本分开生成的。这样一来,您就可以将这些脚本移植到您选择的其他工具中。

合并操作所需的 CDC 字段

为自动生成 CDC 批处理指定以下参数:

  • 源项目 + 数据集:SAP 数据流式传输或复制到的数据集。为了使 CDC 脚本默认正常运行,表需要具有时间戳字段(称为 recordstamp)和具有以下值的操作字段(所有这些值都在复制期间设置):
    • I:表示插入。
    • U:表示更新。
    • D:表示删除。
  • 用于 CDC 处理的目标项目 + 数据集:默认情况下,生成的脚本会根据源数据集的副本生成表(如果这些表不存在)。
  • 复制的表:需要为其生成脚本的表
  • 处理频率:按照 Cron 表示法,DAG 的预期运行频率:
  • 复制 CDC 输出文件的目标 Cloud Storage 存储桶
  • 连接的名称:Cloud Composer 使用的连接的名称。
  • (可选)目标表的名称:如果 CDC 处理的结果与目标表位于同一数据集中,则此字段可用。

针对 CDC 表的性能优化

对于某些 CDC 数据集,您可能需要利用 BigQuery 表分区表聚类或同时利用这两者。此选择取决于以下因素:

  • 表的大小和数据。
  • 表格中可用的列。
  • 需要包含视图的实时数据。
  • 以表的形式实现的具体化数据。

默认情况下,CDC 设置不会应用表分区或表聚簇。您可以根据自己的需求进行配置。如需创建具有分区或集群的表,请使用相关配置更新 cdc_settings.yaml 文件。如需了解详情,请参阅表分区集群设置

  1. 此功能仅在 cdc_settings.yaml 中的数据集配置为以表(例如 load_frequency = "@daily")的形式进行复制时适用,而不适用于定义为视图 (load_frequency = "RUNTIME") 的数据集。
  2. 一个表既可以是分区表,也可以是聚簇表。

如果您使用的是允许在原始数据集中进行分区的复制工具(例如 BigQuery Connector for SAP),建议在原始表中设置基于时间的分区。如果分区类型与 cdc_settings.yaml 配置中的 CDC DAG 频率相匹配,效果会更好。如需了解详情,请参阅 BigQuery 中 SAP 数据建模的设计注意事项

可选:配置 SAP 库存模块

Cortex Framework SAP 库存模块包含 InventoryKeyMetricsInventoryByPlant 视图,可提供有关库存的关键数据洞见。这些视图由使用专用 DAG 的每月和每周快照表提供支持。两者可以同时运行,不会相互干扰。

如需更新一个或两个快照表,请按以下步骤操作:

  1. 根据您的需求,更新 SlowMovingThreshold.sqlStockCharacteristicsConfig.sql,以针对不同的物料类型定义滞销阈值和库存特征。

  2. 对于初始加载或完全刷新,请运行 Stock_Monthly_Snapshots_InitialStock_Weekly_Snapshots_Initial DAG。

  3. 对于后续刷新,请安排或运行以下 DAG:

    • 每月和每周更新:
      • Stock_Monthly_Snapshots_Periodical_Update
      • Stock_Weekly_Snapshots_periodical_Update
    • 每日更新:
      • Stock_Monthly_Snapshots_Daily_Update
      • Stock_Weekly_Snapshots_Update_Daily
  4. 刷新中间 StockMonthlySnapshotsStockWeeklySnapshots 视图,然后分别刷新 InventoryKeyMetricsInventoryByPlants 视图,以显示刷新后的数据。

可选:配置“产品层次结构文本”视图

“产品层次结构文本”视图会扁平化物料及其产品层次结构。生成的表格可用于向 Trends 加载项提供要检索的字词列表,以获取随时间变化的兴趣度。按照以下步骤配置此视图:

  1. ## CORTEX-CUSTOMER 的标记下,调整文件 prod_hierarchy_texts.sql 中的层次结构级别和语言。
  2. 如果您的产品层次结构包含更多层级,您可能需要添加类似于通用表表达式 h1_h2_h3 的额外 SELECT 语句。

    根据源系统的不同,可能还会有其他自定义设置。我们建议让业务用户或分析师尽早参与到流程中,以帮助发现这些问题。

可选:配置层次结构扁平化视图

从版本 v6.0 开始,Cortex Framework 支持将层次结构扁平化为报告视图。与旧版层次结构扁平化器相比,这是一个重大改进,因为它现在可以扁平化整个层次结构,通过利用 S/4 特定的表(而不是旧版 ECC 表)更好地针对 S/4 进行优化,并且还显著提高了性能。

报告数据视图摘要

查找与层次结构扁平化相关的以下视图:

层次结构类型 仅包含扁平化层次结构的表 用于直观呈现扁平化层次结构的视图 使用此层次结构的损益集成逻辑
财务报表版本 (FSV) fsv_glaccounts FSVHierarchyFlattened ProfitAndLossOverview
利润中心 profit_centers ProfitCenterHierarchyFlattened ProfitAndLossOverview_ProfitCenterHierarchy
成本中心 cost_centers CostCenterHierarchyFlattened ProfitAndLossOverview_CostCenterHierarchy

使用层次结构扁平化视图时,请考虑以下事项:

  • 扁平化层次结构视图在功能上等同于由旧版层次结构扁平化解决方案生成的表。
  • 概览视图默认情况下不会部署,因为它们仅用于展示 BI 逻辑。在 src/SAP/SAP_REPORTING 目录下找到其源代码。

配置层次结构扁平化

根据您使用的层次结构,以下输入参数是必需的:

层次结构类型 必需参数 来源字段 (ECC) 来源字段 (S4)
财务报表版本 (FSV) 科目表 ktopl nodecls
层次结构名称 versn hryid
利润中心 集合的类 setclass setclass
组织部门:控制区域或集合的其他键。 subclass subclass
成本中心 集合的类 setclass setclass
组织部门:控制区域或集合的其他键。 subclass subclass

如果您不确定确切的参数,请咨询财务或控制 SAP 顾问。

收集参数后,根据您的要求更新每个相应目录中的 ## CORTEX-CUSTOMER 注释:

层次结构类型 代码位置
财务报表版本 (FSV) src/SAP/SAP_REPORTING/local_k9/fsv_hierarchy
利润中心 src/SAP/SAP_REPORTING/local_k9/profitcenter_hierarchy
成本中心 src/SAP/SAP_REPORTING/local_k9/costcenter_hierarchy

如果适用,请务必更新 src/SAP/SAP_REPORTING 目录下的相关报告视图中的 ## CORTEX-CUSTOMER 注释。

解决方案详情

以下源表用于层次结构扁平化:

层次结构类型 源表 (ECC) 源表 (S4)
财务报表版本 (FSV)
  • fagl_011pc
  • fagl_011zc
  • ska1
  • hrrp_node
  • hrrp_directory
  • ska1
利润中心
  • setheader
  • setnode
  • setleaf
  • sethanahier0106
成本中心
  • setheader
  • setnode
  • setleaf
  • sethanahier0101

直观呈现层次结构

Cortex 的 SAP 层次结构扁平化解决方案可将整个层次结构扁平化。如果您想创建与 SAP 在界面中显示的层次结构类似的层次结构可视化表示,请使用 IsLeafNode=True 条件查询用于可视化扁平化层次结构的视图之一。

从旧版层次结构扁平化解决方案迁移

如需从 Cortex v6.0 之前的旧版层次结构扁平化解决方案迁移,请按照下表所示替换表。请务必检查字段名称是否准确,因为有些字段名称已略有修改。例如,cepc_hier 中的 prctr 现在是 profit_centers 表中的 profitcenter

层次结构类型 替换此表格 参与者
财务报表版本 (FSV) ska1_hier fsv_glaccounts
利润中心 cepc_hier profit_centers
成本中心 csks_hier cost_centers

可选:配置 SAP 财务模块

Cortex Framework SAP Finance 模块包含 FinancialStatementBalanceSheetProfitAndLoss 视图,可提供关键的财务数据分析。

如需更新这些财务表,请按以下步骤操作:

对于初始加载

  1. 部署后,请确保 CDC 数据集已正确填充(根据需要运行任何 CDC DAG)。
  2. 确保为所使用的层次结构类型(FSV、成本中心和利润中心)正确配置层次结构扁平化视图
  3. 运行 financial_statement_initial_load DAG。

  4. 如果以表的形式部署(推荐),请按顺序运行以下 DAG 来刷新相应数据:

    1. Financial_Statements
    2. BalanceSheets
    3. ProfitAndLoss

定期刷新

  1. 确保层次结构扁平化视图已正确配置,并且针对您使用的层次结构类型(FSV、成本中心和利润中心)刷新到最新状态。
  2. 安排或运行 financial_statement_periodical_load DAG。

  3. 如果以表的形式部署(推荐),请按顺序运行以下 DAG 来刷新相应数据:

    1. Financial_Statements
    2. BalanceSheets
    3. ProfitAndLoss

如需直观呈现这些表中的数据,请参阅以下概览视图:

  • 如果您使用的是 FSV 层次结构,则为 ProfitAndLossOverview.sql
  • ProfitAndLossOverview_CostCenter.sql 如果您使用的是成本中心层次结构。
  • 如果您使用的是利润中心层次结构,则为 ProfitAndLossOverview_ProfitCenter.sql

可选:启用依赖于任务的 DAG

Cortex Framework 可选择性地为大多数 SAP SQL 表(ECC 和 S/4 HANA)提供推荐的依赖项设置,其中所有依赖表都可以通过单个 DAG 进行更新。您可以进一步自定义这些设置。如需了解详情,请参阅依赖于任务的 DAG

后续步骤