通过 SAP Data Services 将数据从 SAP 系统导出到 Google BigQuery

本文介绍了如何使用 SAP Data Services (DS) 将数据从 SAP 应用或其底层数据库导出到 BigQuery。

此数据库可以是 SAP HANA 或任何其他 SAP 支持的数据库。

本指南中的示例导出 SQL Anywhere 数据库表,但您也可以使用它们来设置将其他类型的对象从 SAP 应用和数据库层导出到 BigQuery。

您可以使用数据导出功能备份 SAP 数据,或将 SAP 系统中的数据与 BigQuery 中其他系统的使用方数据进行整合,以从机器学习和 PB 级数据分析中获得数据洞见。

本文的说明适合对 SAP Basis、SAP DS 和 Google Cloud 的配置有基本经验的 SAP 系统管理员阅读。

架构

复制流从 SAP 应用或数据库开始,并通过 SAP Data Services 传递到 BigQuery

SAP Data Services 从 SAP 应用或底层数据库检索数据,然后将数据转换为与 BigQuery 兼容的格式,最后启动将数据移动到 BigQuery 的加载作业。加载作业完成后,BigQuery 可以提供这些数据,供您分析使用。

导出是指导出时源系统中数据的快照。您可以控制 SAP Data Services 启动导出的时间。目标 BigQuery 表中的任何现有数据都会被导出的数据覆盖。 导出完成后,BigQuery 中的数据不会与源系统中的数据保持同步。

在此场景中,SAP 源系统和 SAP Data Services 可以在 Google Cloud 上运行,也可以不在 Google Cloud 上运行。

核心解决方案组件

您必须使用以下组件,才能使用 SAP Data Services 将数据从 SAP 应用或数据库中导出到 BigQuery:

组件 所需版本 备注
SAP 应用服务器堆栈 从 R/3 4.6C 开始的任何基于 ABAP 的 SAP 系统 在本指南中,应用服务器和数据库服务器统称为源系统,即使它们在不同的机器上运行也是如此。

定义具有适当授权的 RFC 用户

可选:定义用于日志记录表的单独表空间
数据库 (DB) 系统 SAP 产品可用性矩阵 (PAM) 中列出的任何受支持的 DB 版本,受 PAM 中列出的 SAP NetWeaver 堆栈的任何限制约束。
SAP Data Services SAP Data Services 4.2 SP1 或更高版本
BigQuery 不适用

费用

BigQuery 是收费的 Google Cloud 组件。

请使用价格计算器根据您的预计用量来估算费用。

前提条件

本文的说明假定 SAP 应用系统、数据库服务器和 SAP Data Services 已安装并进行了配置,可以正常运行。

请与 SAP 联系,以确保您计划的配置符合 SAP 许可要求。这些要求可能会有所不同,具体取决于您是从 SAP 应用系统还是从底层数据库导出数据。

在 Google Cloud 中设置 Cloud 项目

在使用 BigQuery 之前,您需要一个 Google Cloud 项目。

创建 Cloud 项目

  1. 转到 Google Cloud Console 并注册(逐步完成设置向导)。

    转到 Cloud Console

  2. 在左上角的 Google Cloud 徽标旁边,点击下拉列表并选择新建项目

  3. 为项目命名,然后点击创建

  4. 创建项目(右上角会显示一条通知)后,刷新页面。

启用 API

启用 BigQuery API:

转到 BigQuery API

创建服务帐号

该服务帐号(具体说来是其密钥文件)用于向 BigQuery 验证 SAP DS 身份。您稍后在创建目标数据存储区时会使用该密钥文件。

  1. 在 Google Cloud Console 中,转到服务帐号页面。

    转到“服务帐号”

  2. 选择您的 Google Cloud 项目。

  3. 点击创建服务帐号

  4. 输入服务帐号名称

  5. 点击创建并继续

  6. 选择角色列表中,选择 BigQuery > BigQuery Data Editor

  7. 点击添加其他角色

  8. 选择角色列表中,选择 BigQuery > BigQuery Job User

  9. 点击继续

  10. 根据具体情况授予其他用户访问服务帐号的权限。

  11. 点击完成

  12. 在 Cloud Console 中的服务帐号页面上,点击您刚创建的服务帐号的电子邮件地址。

  13. 在服务帐号名称下,点击密钥标签页。

  14. 点击添加密钥下拉菜单,然后选择创建新密钥

  15. 确保指定了 JSON 密钥类型。

  16. 点击创建

  17. 将自动下载的密钥文件保存到安全的位置。

配置从 SAP 系统到 BigQuery 的导出

配置此解决方案包括以下简要步骤:

  • 配置 SAP Data Services
  • 创建 SAP Data Services 和 BigQuery 之间的数据流

SAP Data Services 配置

创建数据服务项目

  1. 打开 SAP Data Services Designer 应用。
  2. 转到 Project > New > Project
  3. Project name 字段中指定一个名称。
  4. 点击 Create。您的项目会显示在左侧的 Project Explorer 中。

创建源数据存储区

您可以将 SAP 应用系统或其底层数据库用作 SAP Data Services 的源数据存储区。可以导出的数据对象类型取决于您用作数据存储区的是 SAP 应用系统还是数据库。

如果您使用 SAP 应用系统作为数据存储区,则可以导出以下对象:

  • 视图
  • 层次结构
  • ODP
  • BAPI(函数)
  • IDoc

复制流从 SAP 应用或数据库开始,并通过 SAP Data Services 传递到 BigQuery

如果您使用底层数据库作为数据存储区连接,则可以导出以下对象:

  • 视图
  • 存储过程
  • 其他数据对象

复制流从 SAP 应用或数据库开始,并通过 SAP Data Services 传递到 BigQuery

以下部分介绍了 SAP 应用系统和数据库的数据存储区配置。无论数据存储区连接或数据对象的类型如何,导入和使用 SAP Data Services 数据流中对象的过程几乎完全相同。

配置 SAP 应用层连接

以下步骤将创建与 SAP 应用的连接,并将数据对象添加到 Designer 对象库中的适用数据存储区节点。

  1. 打开 SAP Data Services Designer 应用。
  2. 在 Project Explorer 中打开您的 SAP Data Services 项目。
  3. 转到 Project > New > Datastore
  4. 填写 Datastore Name。例如,ECC_DS。
  5. Datastore type 字段中,选择 SAP Applications
  6. Application server name 字段中,提供 SAP 应用服务器的实例名称。
  7. 指定 SAP 应用服务器访问凭据。
  8. 点击 OK

配置 SAP 数据库层连接

SAP HANA

这些步骤将创建与 SAP HANA 数据库的连接,并将数据表添加到 Designer 对象库中的适用数据存储区节点。

  1. 打开 SAP Data Services Designer 应用。
  2. 在 Project Explorer 中打开您的 SAP Data Services 项目。
  3. 转到 Project > New > Datastore
  4. 填写 Datastore Name,例如:HANA_DS。
  5. Datastore type 字段中,选择 Database
  6. Database type 字段中,选择 SAP HANA
  7. Database version 字段中,选择您的数据库版本。
  8. 填写 Database server 名称、Port Number 和访问凭据。
  9. 点击 OK
其他受支持的数据库

以下步骤将创建与 SQL Anywhere 的连接,并将数据表添加到 Designer 对象库中的适用数据存储区节点。

创建与其他受支持数据库的连接的步骤几乎完全相同。

  1. 打开 SAP Data Services Designer 应用。
  2. 在 Project Explorer 中打开您的 SAP Data Services 项目。
  3. 转到 Project > New > Datastore
  4. 填写 Name,例如:SQL_ANYWHERE_DS。
  5. Datastore type 字段中,选择 Database
  6. Database type 字段中,选择 SQL Anywhere
  7. Database version 字段中,选择您的数据库版本。
  8. 填写 Database server nameDatabase name 和访问凭据。
  9. 点击 OK

新数据存储区会显示在 Designer 本地对象库的 Datastore 标签页中。

创建目标数据存储区

以下步骤将创建一个 BigQuery 数据存储区,该数据存储区会使用您之前在创建服务帐号部分中创建的服务帐号。该服务帐号可让 SAP Data Services 安全地访问 BigQuery。

如需了解详情,请参阅 SAP Data Services 文档中的获取 Google 服务帐号电子邮件地址 (Obtain your Google service account email) 和获取 Google 服务帐号私钥文件 (Obtain a Google service account private key file)。

  1. 打开 SAP Data Services Designer 应用。
  2. 在 Project Explorer 中打开您的 SAP Data Services 项目。
  3. 转到 Project > New > Datastore
  4. 填写 Name 字段。例如,BQ_DS。
  5. Datastore type 字段中,选择 Google BigQuery
  6. 系统会显示 Web Service URL 选项。该软件会自动使用默认的 BigQuery Web 服务网址完成该选项。
  7. 选择 Advanced
  8. 根据 SAP Data Services 文档中针对 BigQuery 的数据存储区选项说明 (Datastore option descriptions) 完成“Advanced”选项。
  9. 点击 OK

新数据存储区会显示在 Designer 本地对象库的 Datastore 标签页中。

设置 SAP Data Services 和 BigQuery 之间的数据流

要设置数据流,您需要创建批量作业、创建 BigQuery 加载器数据流,并将源表和 BigQuery 表作为外部元数据导入 SAP Data Services。

创建批量作业

  1. 打开 SAP Data Services Designer 应用。
  2. 在 Project Explorer 中打开您的 SAP Data Services 项目。
  3. 转到 Project > New > Batch Job
  4. 填写 Name 字段。例如,JOB_SQL_ANYWHERE_BQ。
  5. 点击 OK

创建数据流逻辑

导入源表

以下步骤会从源数据存储区导入数据库表,并使其在 SAP Data Services 中可用。

  1. 打开 SAP Data Services Designer 应用。
  2. 在 Project Explorer 中展开源数据存储区。
  3. 在右侧面板的上面部分中选择 External Metadata 选项。系统会显示包含可用表和/或其他对象的节点列表。
  4. 从列表中选择要导入的表。
  5. 点击鼠标右键,然后选择 Import 选项。
  6. 导入的表现在在源数据存储区节点下的对象库中可见。
创建数据流
  1. 在 Project Explorer 中选择批量作业。
  2. 右键点击右侧面板中的空白工作区,然后选择 Add New > Dataflow 选项。
  3. 右键点击数据流图标,然后选择 Rename
  4. 将名称更改为 DF_SQL_ANYWHERE_BQ。
  5. 双击数据流图标以打开数据流工作区。

    数据流图标的屏幕截图。

导入数据流并将其与源数据存储区对象相关联
  1. 在 Project Explorer 中展开源数据存储区。
  2. 从数据存储区中,将源表拖放到数据流工作区(将表拖到工作区时,请选择 Make Source 选项)。在本文的说明中,数据存储区名为 SQL_ANYWHERE_DS。您的数据存储区名称可能有所不同。
  3. Query transform 从对象库的 Transforms 标签页的 Platform 节点拖动到数据流上。
  4. 将工作区中的源表连接到 Query transform
  5. 双击 Query transform
  6. 选择左侧 Schema In 下的所有表字段,然后将其拖动到右侧的 Schema Out 中。

    • 在右侧的 Schema Out 列表中选择 datetime 字段。
    • 选择架构列表下方的 Mapping 标签页。
    • 将字段名称替换为以下函数:

      to_date(to_char(FIELDNAME,'yyyy-mm-dd hh24:mi:ss'), 'yyyy-mm-dd
      hh24:mi:ss')

      其中,FIELDNAME 是所选字段的名称。

    SAP Data Services Designer 的屏幕截图,显示字段的 Datetime 数据类型转换。

  7. 点击应用工具栏中的“返回”图标,返回 Dataflow 编辑器。

  8. 从对象库的 Transforms 标签页的 Platform 节点中,将 XML_Map 转换拖动到数据流上。

  9. 在对话框中选择 Batch 模式。

  10. Query 转换连接到 XML_Map 转换。

    图标的屏幕截图,代表从源表通过 Query 转换到 XML 映射的流。

创建架构文件

以下步骤将创建一个反映源表结构的架构文件。稍后,您将使用该架构文件创建 BigQuery 表。

该架构可确保 BigQuery 加载器数据流成功填充新的 BigQuery 表。

  1. 打开 XML Map transform,然后根据您要在 BigQuery 表中添加的数据完成输入和输出架构部分。
  2. 右键点击 Schema Out 列中的 XML_Map 节点,然后从下拉菜单中选择 Generate Google BigQuery Schema
  3. 输入架构的名称和位置。
  4. 点击 Save

SAP Data Services 会生成一个具有 .json 文件扩展名的架构文件。

SAP Data Services Designer 的屏幕截图,显示生成 Google BigQuery 架构的下拉菜单。

创建 BigQuery 表

您需要在 Google Cloud 上的 BigQuery 数据集中创建表以加载数据。您可以使用在 SAP Data Services 中创建的架构来创建表。

该表以您在上一步中生成的架构为基础。

  1. 在 Google Cloud Console 中访问您的 Cloud 项目。
  2. 选择 BigQuery
  3. 点击相应的数据集。
  4. 点击创建表
  5. 输入表名称。例如,BQ_DATA_LOAD
  6. 架构下,切换设置以启用以文本形式修改模式。
  7. 在 BigQuery 中设置新表的架构,方法是复制并粘贴您在创建架构文件中创建的架构文件的内容。
  8. 点击创建表
导入 BigQuery 表

以下步骤将导入您在上一步中创建的 BigQuery 表,并使其在 SAP Data Services 中可用。

  1. 在 SAP Data Services Designer 对象库中,右键点击 BigQuery 数据存储区,然后选择 Refresh Object Library 选项。这将更新您可以在数据流中使用的数据源表列表。
  2. 打开 BigQuery 数据存储区。
  3. 在右侧面板的上面部分中,选择 External Metadata。此时将显示您创建的 BigQuery 表。
  4. 右键点击相应的 BigQuery 表名称,然后选择 Import
  5. 此时,系统会开始将选定的表导入 SAP Data Services。现在,该表在目标数据存储区节点下的对象库中可见。
导入数据流并将其与目标数据存储区对象相关联
  1. 从对象库的数据存储区中,将导入的 BigQuery 表拖到数据流中。本文的说明中数据存储区的名称为 BQ_DS。您的数据存储区名称可能有所不同。
  2. XML_Map 转换连接到导入的 BigQuery 表。

    图标的屏幕截图,代表从源表通过 Query 转换和 XML 映射到 BigQuery 表的流。

  3. 打开 XML_Map 转换,然后根据您要在 BigQuery 表中添加的数据完成输入和输出架构部分。

  4. 双击工作区中的 BigQuery 表以将其打开,然后完成 Target 标签页中的选项,如下表所示:

    选项 说明
    Make Port 指定 No(默认值)。

    指定 Yes 会将源文件或目标文件设置为嵌入式数据流端口。
    Mode 为初始加载指定 Truncate,这样会将 BigQuery 表中的任何现有记录替换为 SAP Data Services 加载的数据。Truncate 是默认值。
    Number of loaders 指定一个正整数以设置要用于处理的加载器(线程)的数量。默认值为 4。

    每个加载器都会在 BigQuery 中启动一个可继续执行的加载作业。您可以指定任意数量的加载器。
    如需获得有关如何确定加载器适当数量的帮助,请参阅 SAP 文档,包括:
    Maximum failed records per loader 指定 0 或正整数,以设置在 BigQuery 停止加载记录之前每个加载作业可以失败的最大记录数。默认值为零 (0)。
  5. 点击顶部工具栏中的“Validate”图标。

  6. 点击应用工具栏中的“Back”图标,以返回到 Dataflow 编辑器。

将数据加载到 BigQuery 中

以下步骤将在 SAP Data Services 中启动复制作业并执行数据流,以便将数据从源系统加载到 BigQuery。

执行加载时,源数据集中的所有数据都会复制到目标 BigQuery 表,该表连接到加载数据流。目标表中的任何数据都会被覆盖。

  1. 在 SAP Data Services Designer 中,打开 Project Explorer。
  2. 右键点击复制作业名称,然后选择 Execute
  3. 点击 OK
  4. 此时,加载过程会启动,而调试消息也开始出现在 SAP Data Services 日志中。数据将加载到您在 BigQuery 中为初始加载创建的表中。本文的说明中加载表的名称为 BQ_DATA_LOAD。您的表名称可能有所不同。
  5. 要查看加载是否已完成,请转到 Google Cloud Console 并打开包含该表的 BigQuery 数据集。如果数据仍在加载,则表名称旁边会显示“Loading”。

加载完成后,即可在 BigQuery 中处理数据。

安排加载作业

您可以使用 SAP Data Services Management Console 安排加载作业定期运行。

  1. 打开 SAP Data Services Management Console 应用。
  2. 点击 Administrator
  3. 展开左侧菜单树中的 Batch 节点。
  4. 点击您的 SAP Data Services 代码库的名称。
  5. 点击 Batch Job Configuration 标签页。
  6. 点击 Add Schedule
  7. 填写 Schedule 名称。
  8. 选中 Active
  9. Select scheduled time for executing the jobs 部分中,指定增量加载的执行频率。
    1. 重要提示:Google Cloud 会限制您一天中可以运行的 BigQuery 加载作业的数量。请确保您安排的数量不会超过限制;该限制所对应的数量无法增加。如需详细了解 BigQuery 加载作业的限制,请参阅 BigQuery 文档中的配额和限制
  10. 点击 Apply

    SAP Data Services Management Console 中“安排批量作业”标签页的屏幕截图。

后续步骤

在 BigQuery 中查询和分析复制的数据。 如需详细了解查询,请参阅以下内容:

请参阅以下内容,了解如何设置解决方案以使用 SAP Landscape Transformation Replication Server 和 SAP Data Services 以近乎实时的方式将数据从 SAP 应用复制到 BigQuery:

探索有关 Google Cloud 的参考架构、图表、教程和最佳做法。查看我们的云架构中心