SAP 表批处理源

本页面介绍了如何配置从 SAP 应用数据进行批量提取。

借助 SAP table batch source 插件(SAP Table 插件),您可以从 SAP 标准表和自定义表或视图中读取数据。它支持使用 Cloud Data Fusion 将 SAP 应用中的数据批量注入到 BigQuery 或任何其他受支持的目标系统中。该插件具有以下主要功能:

  • 使用 SAP ECC、SAP S4/HANA 或 SAP BW 作为源系统
  • 不使用 SAP CDC(变更数据捕获)来跟踪和提取数据源中的新数据和增量数据
  • 使用批量提取模式
  • 支持将 SAP 表和 ABAP CDS 视图用作数据源
  • 通过应用层访问 SAP 数据

您可以读取以下来源的数据:

  • 透明表
  • 聚簇表
  • 台球桌
  • ABAP CDS 视图
  • SAP BW ADSO 对象

支持的软件版本

软件 版本
SAP S4/HANA SAP S4/HANA 1909 及更高版本
SAP ECC SAP ERP6 NW 7.31 SP16 及更高版本
SAP JCo SAP JCo 3.0.20 版及更高版本
Cloud Data Fusion 6.3 及更高版本

如需详细了解 SAP on Google Cloud,请参阅 SAP on Google Cloud概览

准备工作

设置 SAP Table 插件使用的以下系统和服务:

  1. 配置 SAP ERP 系统。 此过程包括以下步骤:
    • 安装 SAP 传输文件。
    • 设置所需的 SAP 授权和角色。
    • 设置 SAP Java 连接器。
  2. 在 Cloud Data Fusion 中部署插件

    • 重要提示:请选择与 Cloud Data Fusion 版本兼容的插件版本。
    • 如果您升级 Cloud Data Fusion 实例或插件的版本,请评估更改对流水线功能范围和性能的影响。
  3. 在 Cloud Data Fusion 和 SAP 之间建立 RFC 连接

    • 确保 Cloud Data Fusion 实例和 SAP 服务器之间启用了通信。
    • 对于专用实例,请设置 VPC 网络对等互连
    • SAP 系统和 Cloud Data Fusion 实例必须位于同一项目中。

配置插件

  1. 前往 Cloud Data Fusion 网页界面,然后点击 Studio
  2. 检查是否已选择数据流水线 - 批量(而非实时)。
  3. 来源菜单中,点击 SAP 表。SAP 表节点会显示在流水线中。
  4. 如需配置来源,请前往 SAP Table 节点,然后点击属性
  5. 输入以下属性。如需查看完整列表,请参阅属性

    1. 为 SAP Table 节点输入标签,例如 SAP tables
    2. 输入连接详细信息。您可以设置新的临时连接,也可以设置现有的可重复使用的连接。

      新增关联项

      如需添加与 SAP 的一次性连接,请按以下步骤操作:

      1. 保持使用连接处于关闭状态。
      2. 连接部分中,在相应字段中输入 SAP 账号的以下信息:

        1. 参考名称字段中,输入连接的名称,用于标识此来源的谱系。
        2. SAP 客户端字段中,输入 SAP 中特定实例或环境的客户端名称。SAP 管理员可以提供客户端名称。
        3. SAP 语言字段中,输入 SAP 登录语言。 默认值为 EN(英语)。
        4. 选择以下连接类型之一。

          • 直接(通过 SAP 应用服务器)。如果您选择此默认类型,请在以下字段中输入信息:SAP 应用服务器主机SAP 系统编号SAP 路由器
          • 负载均衡(通过 SAP 消息服务器)。如果您选择此类型,请在以下字段中输入信息:SAP 消息服务器主机SAP 消息服务器服务或端口号SAP 系统 ID (SID)SAP 登录组名称
        5. SAP 表/视图名称字段中,输入 SAP 系统中表或视图的名称。

        6. 提供 SAP 凭据:向 SAP 管理员索取 SAP 登录用户名密码

        7. JCo 库 Cloud Storage 路径字段中,输入 Cloud Storage 中包含您上传的 SAP JCo 库文件的 SAP Java 连接器 (SAP JCo) 路径。

        8. 如需基于 SAP 的元数据生成架构,并将 SAP 数据类型映射到相应的 Cloud Data Fusion 数据类型,请点击获取架构。如需了解详情,请参阅数据类型映射

        9. 可选:如需优化来自 SAP 的提取负载,请在以下字段中输入信息:

          1. 借助过滤选项,您可以根据选择条件(例如具有一组定义的值的列)提取记录。在 WHERE 子句中以 OpenSQL 语法定义条件。例如,以下查询会返回 Roster 表中 SchoolID 列值为 SchoolID > 52 的所有行:

            SELECT * FROM Roster WHERE SchoolID > 52;
            

            如需了解详情,请参阅支持的过滤条件

          2. 要提取的行数字段中,您可以提供一个正整数来限制提取的数据行数。

          3. 分片数字段中,您可以创建分区以并行提取数据记录,从而提高性能。拆分的数量会影响 SAP 工作进程,因此必须谨慎选择。

          4. 软件包大小字段中,指定要在单个 SAP 网络调用中提取的记录数。软件包大小会影响性能和可用资源,因此必须谨慎选择。

      可重复使用的连接

      如需重复使用现有连接,请按以下步骤操作:

      1. 开启使用连接
      2. 点击浏览连接
      3. 点击连接名称。

      如果不存在连接,请按以下步骤创建可重复使用的连接:

      1. 依次点击添加连接 > SapTable
      2. 在打开的创建 SapTable 连接页面上,输入连接名称和说明。
      3. SAP 客户端字段中,输入 SAP 中特定实例或环境的客户端名称。SAP 管理员可以提供客户端名称。
      4. SAP 语言字段中,输入 SAP 登录语言。 默认值为 EN(英语)。
      5. 选择以下连接类型之一。

        • 直接(通过 SAP 应用服务器)。如果您选择此默认类型,请在以下字段中输入信息:SAP 应用服务器主机SAP 系统编号SAP 路由器
        • 负载均衡(通过 SAP 消息服务器)。如果您选择此类型,请在以下字段中输入信息:SAP 消息服务器主机SAP 消息服务器服务或端口号SAP 系统 ID (SID)SAP 登录群组名称
      6. 提供 SAP 凭据:向 SAP 管理员索取 SAP 登录用户名密码值。

      7. JCo 库 Cloud Storage 路径字段中,输入 Cloud Storage 中包含您上传的 SAP JCo 库文件的 SAP Java 连接器 (SAP JCo) 路径。

      8. 可选:在其他 SAP 连接属性字段中,输入必须替换 SAP JCo 默认值的键值对。

      9. 点击创建

属性

属性 已启用宏 必需属性 说明
标签 数据流水线中节点的名称。
使用连接 使用可重用的连接。如果使用连接,则无需提供凭据。如需了解详情,请参阅管理连接
参考名称 如果未开启使用连接,则会显示此字段。 用于谱系的连接的名称。
名称 如果使用连接处于开启状态,则会显示此字段。可重用连接的名称。
SAP 客户端 SAP 系统中的实例或环境。
拍摄快照 启用 SAP 中的数据快照。
何时开启快照功能
  • 从任何活跃的事务性表格数据中提取
  • 在数据查询速度较慢且每次提取调用消耗更多内存的表上提取数据。

何时关闭快照:您正在并行运行多个大容量数据提取作业。快照使用 SAP 中的缓冲表,这可能会导致 SAP 中出现 out of memory 问题。不过,在数据提取完成后,系统会清除缓冲区表。
SAP 语言 SAP 界面和数据的显示和处理语言。
连接类型 SAP 连接类型:直接负载均衡
SAP 应用服务器主机 仅对于直接连接类型,此主机名来自 SAP 应用服务器,该服务器充当 SAP 客户端(例如 SAP 网页界面、Web 浏览器或移动应用)与底层数据库之间的中间件层。
SAP 系统编号 仅对于直接连接类型,此编号是分配给每个 SAP 系统的唯一标识符。例如,00
SAP 路由器 仅对于直接连接类型,这是代理服务器的路由器字符串,可为 SAP 系统与外部客户端或合作伙伴之间的通信提供安全信道。
SAP 消息服务器主机 仅对于负载均衡连接类型,这是主机的名称,有助于在 SAP 中的多个应用服务器之间实现负载均衡。
SAP 消息服务器服务或端口号 仅对于负载均衡连接类型,这是 SAP 消息服务器监听来自 SAP 客户端和 SAP 内应用服务器的传入连接的网络端口。
SAP 系统 ID (SID) 仅对于负载均衡连接类型,此 ID 会分配给每个 SAP 系统。
SAP 登录群组名称 多个 SAP 应用服务器的逻辑分组或配置的名称。默认值为 PUBLIC
SAP 表/视图名称 有效的表名或视图名称(不区分大小写),可从中提取所有列。
SAP 登录用户名 SAP 的用户名
推荐:如果用户名定期更改,请使用
SAP 登录密码 SAP 密码。
推荐:使用安全宏
GCP 项目 ID Google Cloud 项目 ID。
SAP JCo 库 GCS 路径 您上传 SAP JCo 库文件的 Cloud Storage 的路径。
获取架构 不适用 不适用 该插件基于 SAP 中的元数据生成架构,并将 SAP 数据类型映射到相应的 Cloud Data Fusion 数据类型。请参阅数据类型映射
其他 SAP 连接属性 设置其他 SAP JCo 属性以替换 SAP JCo 默认值。 例如,设置 jco.destination.pool_capacity = 10 会替换默认连接池容量。
过滤条件 以 Open SQL 语法指定的条件,用于通过 SQL WHERE 子句进行过滤。根据条件提取记录,例如列中具有一组定义的值或一系列值的记录。
如需了解详情,请参阅支持的过滤条件
要提取的行数 限制提取的记录数量。
  • 请输入正整数。
  • 如果值为 0 或留空,则 Cloud Data Fusion 会从表中提取所有记录。
  • 如果您输入的正值大于所选记录数(根据您的其他过滤条件值),Cloud Data Fusion 将仅提取所选记录。
要生成的分片数 创建分区以并行提取记录。
运行时引擎会在提取记录时创建指定数量的分区(和 SAP 连接)。
增加此值时要小心,因为这会增加与 SAP 的并发连接数
推荐:规划每个流水线的 SAP 连接数以及同时运行的流水线总数。
如果值为 0 或留空,Cloud Data Fusion 会根据可用的执行程序数量、要提取的记录以及软件包大小选择适当的值。
软件包大小 要在单个 SAP 网络调用中提取的记录数。这是每次网络提取调用期间 SAP 在内存中缓冲的记录数。
设置此属性时请谨慎操作。多个提取数据的数据流水线可能会使内存用量达到峰值,并可能因 Out of memory 错误而导致失败。
  • 请输入正整数。
  • 如果为 0 或留空,则插件会使用标准值 70000 或正确计算的值。
  • 如果数据流水线因 Out of memory 错误而失败,请减小软件包大小或增加可用于 SAP 工作进程的内存。

支持的过滤条件

支持以下过滤条件。

包含比较运算符的过滤条件

使用比较运算符,根据值之间的比较结果执行更复杂的过滤。

语法
    SELECT * FROM table_name WHERE column_name > value; \
    SELECT * FROM table_name WHERE column_name BETWEEN value1 AND value2;
    
示例
AUDAT GT '20230914'

包含 LIKE 运算符的过滤条件

使用 LIKE 运算符进行模式匹配。如需匹配任意字符,请使用 % 符号作为通配符。

语法
    SELECT * FROM table_name WHERE column_name LIKE 'pattern%';
    
示例
ERNAM LIKE 'KIRAN%'

包含 IN 运算符的过滤条件

使用 IN 运算符指定要匹配的值列表。

语法
    SELECT * FROM table_name WHERE column_name \
      IN ('value1', 'value2', 'value3');
    
示例
ERNAM IN ( 'LEE' , 'KIRAN' )

包含逻辑运算符的过滤条件

使用逻辑运算符指定要匹配的值列表。

语法
    SELECT * FROM table_name WHERE condition1 AND condition2; \
      SELECT * FROM table_name WHERE condition1 OR condition2; \
      SELECT * FROM table_name WHERE NOT condition;
    
示例
  • ( AUDAT EQ '20220615' ) AND ( ERNAM LIKE 'LEE%' )
  • ( AUDAT EQ '20220615' ) OR ( AUDAT EQ '20220617' )

包含日期范围的过滤条件

使用日期范围可检索日期时间列位于特定日期范围内的行。

语法
    SELECT * FROM table_name \
      WHERE datetime_column >= 'start_date' AND datetime_column <= 'end_date';
    
示例
AUDAT GE '20230910' AND AUDAT LE '20230914'

包含日期比较的过滤条件

使用日期比较来检索使用日期时间值的行。

语法
    SELECT * FROM table_name WHERE datetime_column > 'target_date';
    
示例
AUDAT GE '20230910' AND AUDAT LE '20230914'

结合日期和时间的过滤条件

如果您的日期时间列同时包含日期和时间,您可以相应地进行过滤。

语法
    SELECT * FROM table_name \
      WHERE datetime_column >= 'target_datetime' \
      AND datetime_column <= 'target_datetime';
    
示例
TIMESTAMP GE '20210602144800' AND TIMESTAMP LE '20210624080836'

(时间戳格式:YYYYMMDDHHMMSS)

使用逻辑运算符组合多个条件的过滤条件

您可以使用逻辑运算符(例如 ANDOR)检索满足多个条件的行。

语法
    SELECT * FROM table_name \
      WHERE (column1 = 'value1' AND column2 > value2) \
      OR (column3 = 'value3' AND column4 < value4);
    
示例
    ( ERNAM EQ 'LEE' AND AUDAT GT '20220722' ) \
      OR ( BSTNK EQ 'PO54321065' AND BSTDK LT '20220714' )
    

过滤条件组合嵌套

您可以嵌套方式组合条件,以创建复杂的过滤条件。

语法
    SELECT * FROM table_name \
      WHERE (column1 = 'value1' OR (column2 = 'value2' AND column3 > value3)) \
      AND column4 = 'value4';
    
示例
    ( ERDAT EQ '20220722' OR ( ERNAM EQ 'LEE' AND VDATU GT '20210623' ) ) \
      AND FMBDAT EQ '20220722'
    

使用子查询的过滤条件

您可以使用子查询根据另一查询的结果进行过滤。

语法
    SELECT * FROM table_name \
      WHERE column1 IN (SELECT related_column FROM other_table WHERE condition);
    
示例
VBELN IN ( SELECT VBELN FROM VBAK WHERE ERNAM = 'LEE' )

过滤条件:同时包含日期条件和值条件

您可以在复杂的过滤条件中组合使用基于日期和基于值的条件。

语法
    SELECT * FROM table_name \
      WHERE (column1 = 'value1' OR column2 = 'value2') \
      AND datetime_column > 'target_datetime';
    
示例
    ( ERDAT EQ '20220722' OR ERNAM EQ 'LEE' ) AND VDATU GT '20210623'
    

包含“设置日期格式”的过滤条件

在 SAP 中,日期和时间字段始终在数据库级别保存,不带 -:

语法
    SELECT * FROM table_name \
      WHERE datetime_column >= 'YYYY-MM-DD HH:MM:SS' \
      AND datetime_column <= 'YYYY-M
    

不支持:包含函数和比较运算符的过滤条件

在 SAP 中,不支持 QUERY 的 WHERE 子句中的函数。

不支持:包含区间的过滤条件

在 SAP 中,不支持 NOW() 函数。

语法
    SELECT * FROM table_name \
      WHERE datetime_column >= NOW() - INTERVAL X DAY;
    

不支持:提取日期组成部分的过滤条件

在 SAP 中,不支持偏移过滤。

示例
    WHERE YEAR+0(4) = 2023
    

数据类型映射

下表列出了 SAP 数据类型及其对应的 Cloud Data Fusion 类型。

SAP 数据类型 ABAP 类型 SAP description Cloud Data Fusion 数据类型
INT1(数值) b 1 个字节的整数 整数
INT2(数值) 2 个字节的整数 整数
INT4(数值) i 4 个字节的整数 整数
INT8(数值) 8 8 个字节的整数 长整型
DEC(数值) p 打包成采用 BCD 格式的数字 (DEC) decimal
DF16_DECDF16_RAW(数值) a 十进制浮点 8 字节 IEEE 754r 双精度
DF34_DECDF34_RAW(数值) e 十进制浮点 16 字节 IEEE 754r 双精度
FLTP(数值) f 二进制浮点数 双精度
CHARLCHR(角色) c 字符串 字符串
SSTRINGGEOM_EWKB(角色) 字符串 字符串 字符串
STRING(字符) 字符串 字符串 CLOB 字节
NUMCACCP(角色) n 数字文本 字符串
RAWLRAW(字节) x 二进制数据 字节
RAWSTRING(字节) xstring 字节字符串 BLOB 字节
DATS(日期/时间) d 日期 日期
TIMS(日期/时间) t 时间 时间
TIMS(日期/时间) utcl (Utclong)、时间戳 时间戳

使用场景

支持两种提取上下文:

  • SAP 数据库表和视图
  • SAP ABAP CDS

在每种上下文中,SAP Table 插件都支持标准和自定义数据库表和视图。

限制

SAP Table 插件具有以下限制:

  • 不支持联接表。
  • 不支持带参数的 CDS 视图。
  • 不支持不含密钥字段的情况。
  • 如果启用了快照功能,使用超过 30,000 的软件包大小可能会导致流水线失败。此软件包的大小可能会因 SAP 表中的列数而异。您可以使用以下公式计算表的最佳软件包大小:行大小(以字符数表示)* 5。
  • 借助 Connection Manager,您最多可以浏览 1,000 个 SAP 表名称。
  • 当流水线发生错误(例如接收器中出现错误)时,SAP Table 插件会尝试通过调用旨在进行清理的自定义 RFM:/GOOG/RFC_READ_TABLE_CLEANUP,来清理与提取相关的任何活跃 SAP 端进程。

后续步骤