BigQuery Toolkit for SAP 概览

借助适用于 SAP 的 BigQuery 工具包,您可以使用 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 数据传输模块中的数据传输配置和复制流程

数据传输配置

如上一部分中的图所示,若要建立从 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 工作负载最近的区域中创建 BigQuery 数据集。 Google Cloud
    • 使用 Cloud Interconnect 连接到 Google Cloud 。
  • 以最佳方式为您的工作负载规划 SAP 服务器系统的容量。
  • 实现并行处理,以便在多个并行线程中调用 BigQuery Data Transfer 模块,从而提高吞吐量。

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

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

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

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

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

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

通过 BigQuery Data Transfer 配置提供的性能调优选项

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,同时仍在表级使用记录压缩,则可以更改这些特定字段的记录压缩设置。因此,发送的数据中不会省略指定字段中的空值,并且会保留在源表中初始化的任何值。

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

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

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

  • 日期字段初始化值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 Data Transfer 模块中配置复制时,您可以指定在 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 中创建表之前,您可以在字段映射屏幕的外部数据元素 (External Data Element) 列中将默认数据类型规范更改为其他 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

获取支持

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 问题时需要帮助,请执行以下操作: