BigQuery Toolkit for SAP 概览

借助 BigQuery Toolkit for SAP,您可以使用 ABAP 以程序化方式访问 SAP 环境中的 BigQuery 资源。您可以通过 SAP 访问 BigQuery 资源,无需为常见操作编写样板代码,例如:

  • 表定义同步:保持 SAP 和 BigQuery 表的同步。
  • 数据类型映射:在 SAP 和 BigQuery 之间映射数据类型。
  • 数据分块:高效传输大型数据集。
  • 错误处理:管理数据复制期间的潜在错误。

与需要 SAP Landscape Transformation Replication ServerBigQuery Connector for SAP 不同,您可以在支持 ABAP 的任何 SAP ERP 系统中使用 BigQuery Toolkit for SAP。

BigQuery Toolkit for SAP 作为本地版本或任何云版本的 ABAP SDK for Google Cloud 的子软件包提供。如需使用该工具包,您需要在 SAP 环境中安装 SDK。如需了解安装步骤,请参阅安装和配置本地版本或任何云版本的 ABAP SDK for Google Cloud

BigQuery Toolkit for SAP 仅适用于本地版本或任何云版本的 ABAP SDK for Google Cloud。

从 SAP 复制到 BigQuery 的数据

借助 BigQuery Toolkit for SAP 的 BigQuery Data Transfer 模块,您可以将数据从 SAP 复制到 BigQuery,以便进行分析和生成报告。

下图显示了 BigQuery Data Transfer 模块中的数据传输配置和数据复制流程:

BigQuery Data Transfer 模块中的数据传输配置和复制流程

数据传输配置

如上一部分的图所示,为了建立从 SAP 到 BigQuery 的数据复制,管理员需要执行以下配置:

  1. 在 Google Cloud中,云管理员会配置 BigQuery 并授予必要的 IAM 权限。
  2. 在 SAP 系统中,SAP 系统管理员会配置 ABAP SDK for Google Cloud,以允许与 Google Cloud进行通信。
  3. 在 SAP 系统中,SAP 系统管理员会配置 BigQuery Data Transfer 模块以管理数据传输设置和 BigQuery 资源详细信息。这些配置存储在以下表格中:
    • /GOOG/BQTR_MASTER
    • /GOOG/BQTR_TABLE
    • /GOOG/BQTR_FIELD
    • /GOOG/BQTR_PARAMS

当 ABAP 代码运行时,BigQuery 数据加载类会读取这些表中的配置,以指导数据复制过程。

数据复制流程

如上一部分的图所示,为了将数据从 SAP 系统复制到 BigQuery,ABAP 开发者会编写自定义 ABAP 代码,以执行以下操作:

  1. 从标准 SAP 表或自定义 SAP 表中读取数据。
  2. 使用 BigQuery 数据加载类 /GOOG/CL_BQTR_DATA_LOAD 将所选数据复制到 BigQuery。该类:

    • 使用存储在 BigQuery Data Transfer 配置表中的配置。
    • 使用 /GOOG/CL_BIGQUERY_V2 类执行表定义同步和数据复制。
  3. 实现后续业务逻辑。

  4. 处理错误和异常。

支持的数据复制源

您可以使用 BigQuery Toolkit for SAP 的 BigQuery Data Transfer 模块以程序化方式将数据从 ABAP 字典对象(例如表、字典视图、CDS 视图、CDS 实体)或具有扁平结构类型的任何数据对象加载到 BigQuery 中。

您可以通过以下方式使用 BigQuery Toolkit for SAP 进行数据复制:

  • 作为 SAP 增强框架(例如业务插件 [BAdI]、用户出口和例程)中的插件。例如,该工具包可以插入到业务数据仓库 (BW) 例程中,以发送由 BW 数据传输流程 (DTP) 处理的数据。
  • 用于从自定义 ABAP 程序批量加载数据。

性能规划

BigQuery Toolkit for SAP 通过对 BigQuery API 进行同步调用,提供向 BigQuery 传输数据的最后阶段。

在自定义 ABAP 应用中使用 BigQuery Toolkit for SAP 时,您可以在 SAP 工作负载中和通过 BigQuery Data Transfer 配置优化数据复制的性能。

针对 SAP 工作负载和自定义应用的性能调优选项

如需优化 SAP 工作负载和自定义应用的性能,请考虑以下选项:

  • 在 Google Cloud上运行 SAP 工作负载(即数据复制到 BigQuery 的源系统)。
  • 如果 SAP 工作负载在 Google Cloud上,请在 SAP 工作负载所在的区域中创建 BigQuery 数据集。
  • 如果您无法在 Google Cloud上运行 SAP 工作负载,请执行以下操作:
    • 在距离 SAP 工作负载最近的 Google Cloud区域中创建 BigQuery 数据集。
    • 使用 Cloud Interconnect 连接到 Google Cloud 。
  • 为您的工作负载以最佳方式规划 SAP 服务器系统的容量。
  • 实现并行处理,以便在多个并行线程中调用 BigQuery Data Transfer 模块,从而提高吞吐量。

由于 BigQuery Toolkit for SAP 提供向 BigQuery 传输数据的最后阶段,因此其性能会受到您特定环境中的各种因素的影响。这些因素可能包括:

  • 网络基础架构:带宽限制、延迟时间和整体网络稳定性对复制速度和效率起着重要作用。

  • 源系统:源数据库的性能(包括硬件、配置和当前负载)可能会影响复制性能。

  • 数据量和更改频率:要复制的数据量和更改频率会影响复制所需的时间和资源。

  • 其他组件:防火墙、安全政策、负载均衡器和其他基础架构元素都会影响数据复制的整体性能。

您负责在自己的环境中对 BigQuery Toolkit for SAP 进行性能测试。为了获得最佳结果,请考虑并优化环境中的所有相关组件。

通过 BigQuery 数据传输配置可用的性能调优选项

BigQuery Data Transfer 配置提供了以下选项来控制复制性能:

数据传输块大小

BigQuery Toolkit for SAP 会将数据作为记录块发送到 BigQuery。我们建议您对 BigQuery Toolkit for SAP 使用默认数据块大小,即 10,000 条记录。如果源表中的记录包含的字段很少,或者字段包含非常小的数据值,则您可以使用更大的数据块大小,最大可以为 BigQuery Toolkit for SAP 允许的最大数据块大小,即 50,000 条记录。

如果给定块中的记录数解析为超出 BigQuery 对 HTTP 请求的字节大小限制的字节大小,您可能会收到 quotaExceeded 错误或 invalid 错误。 如果源表中的记录包含大量字段或字段包含大量数据,则可能会发生这种情况。

如果收到与数据库大小相关的错误,请尝试减小在该表的批量传输配置中指定的数据块大小。或者,您也可以为该表启用动态数据块大小,以自动调整数据块大小。如需了解详情,请参阅动态数据块大小

如果尚未启用动态数据块大小,则对于 MSEGACDOCAMATDOC 等 SAP 源表(这些表可能包含较大的记录,每条记录包含大量字段),您可能需要将数据块大小指定为 2,000。

您可以通过运行 /GOOG/BQTR_SETTINGS 事务来指定数据块大小。分块大小在表属性屏幕的分块大小字段中指定。

记录压缩

默认情况下,BigQuery Toolkit for SAP 通过压缩发送到 BigQuery 的记录来提高复制性能。在表级启用记录压缩(默认设置)后,BigQuery Toolkit for SAP 会在发送到 BigQuery 的记录中省略源记录中的所有空字段。将记录插入 BigQuery 时,在发送的数据中省略的字段会在 BigQuery 内的目标表中使用 null 进行初始化。

不过,如果您需要将一些空字段及其初始值复制到 BigQuery,同时仍在表级使用记录压缩,则可以更改这些特定字段的记录压缩设置。因此,指定字段中的空值不会从发送的数据中省略,并保留在源表中初始化的任何值。

批量传输配置中,您可以使用表级和字段级别的发送未压缩标志设置来控制记录压缩行为。下表总结了根据发送未压缩标志设置的记录压缩行为:

表级的“发送未压缩标志” 字段级的“发送未压缩标志” 记录压缩行为
所有字段都以未压缩形式发送。
所有字段都以未压缩形式发送。
只有字段级的所选字段会以未压缩形式发送。
所有字段都以压缩形式发送。

在发送未压缩的数据复制时,除日期字段和时间戳字段外,空字段会保留在源表中初始化的任何值。日期和时间戳字段的初始化值会收到以下值:

  • 日期字段初始化值DATE 1970-01-01
  • 时间戳字段初始化值TIMESTAMP 1970-01-01 00:00:00 UTC

以下屏幕截图显示了一个记录压缩行为示例:

前文中描述的示意图

上图显示了以下内容:

  • 第 1 行:所有字段都未压缩。在表级选择了发送未压缩标志
  • 第 2 行:所有字段都进行压缩。在表级清除了发送未压缩标志
  • 第 3 行:以下字段未压缩:int2_valuecurr_value_154currencyfloat_valuelang_value。对于这些字段,在字段级选择了发送未压缩标志

为了提高性能,我们建议您不要在表级别选择发送未压缩标志,以免停用记录压缩。这可能会对复制性能产生负面影响。如果您需要仅针对特定字段发送未压缩数据,请在字段级为这些特定字段选择发送未压缩标志

目标表属性

在 BigQuery Toolkit for SAP 的 BigQuery 数据传输模块中配置复制时,您可以指定在 BigQuery Toolkit for SAP 在 BigQuery 中创建目标表时应用的设置。

例如,您可以为目标 BigQuery 表指定以下属性:

  • 表格名称
  • 字段的默认命名选项
  • 用于捕获记录更改和启用记录计数查询的额外字段
  • 表分区

字段的默认命名选项

您可以配置 BigQuery Toolkit for SAP,以根据源字段的名称或源字段的标签和说明为目标 BigQuery 表中的字段创建名称。标签和说明通常提供了有关字段内容的更多信息。

默认情况下,BigQuery Toolkit for SAP 使用源字段的名称。 您可以通过在 /GOOG/BQTR_SETTINGS 事务的大规模转移作业配置的表创建特性中指定自定义名称标志来更改默认值。指定的内容存储在 /GOOG/BQTR_MASTR 配置表中。

创建名称时,BigQuery Toolkit for SAP 会对其进行修改,使其符合 BigQuery 命名惯例。

在 BigQuery Toolkit for SAP 在 BigQuery 中创建表之前,您可以在 /GOOG/BQTR_SETTINGS 事务的字段映射屏幕中修改字段名称。

自定义名称标志已指定时,BigQuery Toolkit for SAP 在创建目标表时将使用的名称会显示在字段映射屏幕的外部字段名称列中。

BigQuery Toolkit for SAP 会根据每个源字段的中等字段标签在外部字段名称列中创建名称。如果未在来源字段定义中指定中等字段标签,则使用字段的简短说明。如果未指定简短说明,则使用最短的指定标签。如果未指定任何内容,则使用来源字段的名称。

如需详细了解如何自定义目标字段名称,请参阅自定义目标字段名称

捕获记录更改并启用记录计数

如需捕获触发复制的源表中的更改类型,并能够查询 BigQuery 表中的记录计数以便与源表中的记录计数进行比较,请在配置复制时在 /GOOG/BQTR_SETTINGS 事务中指定额外字段标志选项。

指定额外字段标志选项后,系统会将以下列添加到目标 BigQuery 表的架构:

字段名称 数据类型 说明
operation_flag STRING

标识将会触发将记录加载或复制到 BigQuery 的源表中的更改类型。

要计算在复制模式下插入的记录,请查询 operation_flag 字段中值为 IUD 的记录。如需查看示例查询,请参阅查询在复制模式下插入的记录数

要计算在初始加载模式下插入的记录,请查询 operation_flag 字段中值为 L 的记录。如需查看示例查询,请参阅查询在初始加载模式下插入的记录数

is_deleted BOOLEAN 如果为 true,则表示从源表中删除了源记录。

如需仅计算 BigQuery 表中尚未从源表中删除的记录,请使用 is_deleted 字段排除已删除的源记录。如需查看示例查询,请参阅查询 BigQuery 表中的记录总数

recordstamp TIMESTAMP

BigQuery Toolkit for SAP 将记录发送到 BigQuery 的时间。

要计算 BigQuery 表中的唯一记录数,请仅查询每条记录最近插入的实例。如需查看示例查询,请参阅查询 BigQuery 表中的记录总数

额外字段标志选项的当前设置存储在 /GOOG/BQTR_MASTR 配置表中。

如需详细了解如何指定额外字段标志,请参阅指定表创建和其他常规特性

表分区

您可以通过以下任一方式创建 BigQuery 表:

  • 按源表中的时间戳字段(创建时间单位列分区表)进行分区的表。
  • 按记录插入 BigQuery 的时间进行分区,从而创建注入时间分区表

在配置复制属性时,您可以通过在 /GOOG/BQTR_TABLE分区类型字段中指定分区类型来启用分区。

您可以指定的分区类型会按小时、天、月或年调整分区的粒度。

如需使用源表中的时间戳进行时间单位列分区,请在分区字段 (Partition Field) 字段中指定源字段的名称。

如需使用 BigQuery 插入时间进行注入时间分区,您可以将分区字段 (Partition Field) 字段留空。BigQuery Toolkit for SAP 会在目标表中创建一个字段来存储插入时间。

目标字段属性

默认情况下,BigQuery Toolkit for SAP 使用 SAP 源表中的字段名称和数据类型作为目标 BigQuery 中的字段名称和数据类型。

(可选)在创建目标表之前,您可以自定义字段名称或更改 BigQuery 数据类型。

自定义目标字段名称

在创建表之前,您可以自定义目标字段名称。

如有必要,BigQuery Toolkit for SAP 会修改您指定的自定义名称,以符合 BigQuery 命名惯例。

配置复制时,您可以在 /GOOG/BQTR_SETTINGS 事务的字段映射屏幕中查看字段名称。BigQuery Toolkit for SAP 将您的设置存储在 /GOOG/BQTR_FIELD 配置表中。

在 BigQuery 中创建表之前,可以通过修改字段映射屏幕的临时字段名称列中生成的名称来指定自定义字段名称。如果您删除值并将临时字段名称字段留空,则 BigQuery Toolkit for SAP 将使用源字段名称作为目标字段名称。

更改临时字段名称列后,当您点击保存时,BigQuery Toolkit for SAP 会验证该值,根据需要应用 BigQuery 命名惯例,然后保存更改。您可以按键盘上的 Enter 键验证值而不保存。

如需详细了解如何设置目标字段的默认命名方法,请参阅字段的默认命名选项

使用电子表格或文本文件修改 BigQuery 字段映射

(可选)在创建目标 BigQuery 表之前,您可以将目标字段的默认数据类型、名称和说明保存到电子表格或文本文件。通过这种方法,BigQuery 数据工程师或管理员即使没有访问 SAP 服务器的权限,也可以修改值。

修改值后,您需要将文件及其内容转换为逗号分隔值 (CSV) 格式。然后,您可以使用自定义事务 /GOOG/BQTR_SETTINGS 上传 CSV 文件,从而将更新应用于批量传输作业设置。

如需使用 CSV 文件修改 BigQuery 字段映射,请执行以下操作:

  1. 创建默认字段映射的电子表格或文本文件。
  2. 修改电子表格或文本文件中的值。
  3. 将电子表格或文本文件转换为 CSV 格式。
  4. BigQuery Data Transfer:设置维护界面中,上传 CSV 文件。

如需详细了解此过程,请参阅在 CSV 文件中修改 BigQuery 字段映射

BigQuery 字段命名惯例

BigQuery 命名惯例仅使用小写字母、数字和下划线。

BigQuery Toolkit for SAP 将 BigQuery 命名惯例应用于任何用于目标字段名称的输入值。

例如,如果您输入 FIELD-@#!*123 作为自定义字段名称,则 BigQuery Toolkit for SAP 会将该名称更改为 field_123

如需详细了解 BigQuery 字段命名惯例,请参阅列名称

数据类型映射

默认情况下,BigQuery Toolkit for SAP 会根据源 SAP 字段的 SAP 类型种类或 SAP 数据类型将数据类型分配给目标 BigQuery 字段。

配置复制时,您可以在 /GOOG/BQTR_SETTINGS 事务的字段映射屏幕中查看数据类型。BigQuery Toolkit for SAP 将您的设置存储在 /GOOG/BQTR_FIELD 配置表中。

在 BigQuery Toolkit for SAP 在 BigQuery 中创建表之前,您可以在字段映射屏幕的外部数据元素列中将默认数据类型规范更改为其他 BigQuery 数据类型。

需要特殊处理的数据类型

为了确保准确性和与目标 BigQuery 表的兼容性,多种 SAP 数据类型在复制过程中需要特殊处理或转换。

虽然 BigQuery Toolkit for SAP 会自动处理其中一些转换,但其他转换需要您注意并进行手动配置。

您需要手动处理以下数据类型的转换:

布尔值

对于布尔值,SAP 使用数据类型 CHAR。默认情况下,BigQuery Toolkit for SAP 会将此数据类型映射到目标 BigQuery 表中的 STRING 数据类型。

因此,当您使用 /GOOG/BQTR_SETTINGS 事务为布尔值配置复制时,您必须将字段映射屏幕中的布尔值字段的默认数据类型分配从 STRING 更改为 BOOLEAN

时间戳

对于时间戳,SAP 使用数据类型 P(压缩十进制)或 DEC(十进制)。默认情况下,BigQuery Toolkit for SAP 会将这些数据类型映射到目标 BigQuery 表中的 NUMERIC

因此,对于时间戳,当您使用 /GOOG/BQTR_SETTINGS 事务配置复制时,您必须将字段映射屏幕中的时间戳字段的默认数据类型分配从 NUMERIC 更改为 TIMESTAMPTIMESTAMP (LONG)

X SAP 类型种类

X SAP 类型种类为十六进制,由 RAWRAWSTRINGLRAW SAP 数据类型表示。默认情况下,BigQuery Toolkit for SAP 会将这些数据类型映射到源 BigQuery 表中的 STRING

如果您需要使用 X 要映射到的 SAP 类型种类 BYTES,则必须更改 /GOOG/BQTR_SETTINGS 事务的字段映射屏幕中字段的默认数据类型分配。

X SAP 类型种类有时还会用于 SAP 来表示整数。在此情况下,BigQuery Toolkit for SAP 会检查源字段的数据类型中是否存在以下某种 SAP 整数数据类型:INT1INT2INT4INT8,并在目标 BigQuery 表中分配 INTEGER 数据类型。

y SAP 类型种类

y SAP 类型种类为字节字符串,由 RAWRAWSTRINGLRAW SAP 数据类型表示。 默认情况下,BigQuery Toolkit for SAP 会将这些数据类型映射到源 BigQuery 表中的 STRING

如果您需要使用 y 要映射到的 SAP 类型种类 BYTES,则需要更改 /GOOG/BQTR_SETTINGS 事务的字段映射屏幕中字段的默认数据类型分配。

默认数据类型映射

下表展示了 BigQuery Toolkit for SAP 的默认数据类型转换:

SAP 类型种类 SAP 数据类型 BigQuery 数据类型 备注
b(1 个字节的整数)
s(2 个字节的整数)
I(4 个字节的整数)
8(8 个字节的整数)
INT1
INT2
INT4
INT8
INTEGER
F(浮点数) FLTP FLOAT
P(打包小数) CURR
DEC
QUAN
NUMERIC 默认情况下,SAP 类型种类 P 会映射到 BigQuery 数据类型 NUMERIC,并转换为采用外部格式的数字。
a(十进制浮点数,16 位) DECFLOAT16
NUMERIC
e(十进制浮点数,16 位) DECFLOAT34
NUMERIC
N(数字) NUMC STRING
X(十六进制)
y(字节字符串)
RAW
RAWSTRING
LRAW
STRING 如果 SAP 类型种类为 X,但数据类型名称涵盖模式 'INT*'INT1INT2INT4),源数据元素将被替换为新的数据元素 TYPINT8 以及 TYPEKIND '8',该值已映射到 BigQuery 数据类型 INTEGER
C(字符)
g(字符串)
? (csequence)
& (clike)
CHARSTRING STRING
D(日期) DATS DATE
T(时间) TIMS TIME

社区资源

如需在使用嵌入式 BW 的 SAP S/4HANA 系统中加速实现基于 BigQuery Toolkit 的应用,您可以使用 GitHub 上提供的开源生成工具

获取支持

Google Cloud 可为与 BigQuery Toolkit for SAP 的安装、配置、操作和维护相关的问题和疑问提供支持。

Google Cloud 不支持其他环境组件,例如网络基础设施、数据库、操作系统或第三方软件。对于与 BigQuery Toolkit for SAP 以外的任何环境组件相关的问题,请与相应的供应商或支持提供方联系。

对于 SAP 提供的功能(例如操作数据预配 [ODP] 和 SAP Landscape Transformation [SLT]),请与 SAP 支持联系以获取帮助。

如需排查 BigQuery Toolkit for SAP 相关问题,请参阅排查 BigQuery Toolkit for SAP 问题

如果您在解决 ABAP SDK for Google Cloud 问题时需要帮助,请执行以下操作: