借助 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 插件使用的以下系统和服务:
- 配置 SAP ERP 系统。
此过程包括以下步骤:
- 安装 SAP 传输文件。
- 设置所需的 SAP 授权和角色。
- 设置 SAP Java 连接器。
-
- 重要提示:请选择与 Cloud Data Fusion 版本兼容的插件版本。
- 如果您升级 Cloud Data Fusion 实例或插件的版本,请评估更改对流水线功能范围和性能的影响。
在 Cloud Data Fusion 和 SAP 之间建立 RFC 连接。
- 确保 Cloud Data Fusion 实例和 SAP 服务器之间启用了通信。
- 对于专用实例,请设置 VPC 网络对等互连。
- SAP 系统和 Cloud Data Fusion 实例必须位于同一项目中。
配置插件
- 前往 Cloud Data Fusion 网页界面,然后点击 Studio。
- 检查是否已选择数据流水线 - 批量(而非实时)。
- 在来源菜单中,点击 SAP 表。SAP 表节点会显示在流水线中。
- 如需配置来源,请前往 SAP Table 节点,然后点击属性。
输入以下属性。如需查看完整列表,请参阅属性。
- 为 SAP Table 节点输入标签,例如
SAP tables。 输入连接详细信息。您可以设置新的临时连接,也可以设置现有的可重复使用的连接。
新增关联项
如需添加与 SAP 的一次性连接,请按以下步骤操作:
- 保持使用连接处于关闭状态。
在连接部分中,在相应字段中输入 SAP 账号的以下信息:
- 在参考名称字段中,输入连接的名称,用于标识此来源的谱系。
- 在 SAP 客户端字段中,输入 SAP 中特定实例或环境的客户端名称。SAP 管理员可以提供客户端名称。
- 在 SAP 语言字段中,输入 SAP 登录语言。 默认值为 EN(英语)。
选择以下连接类型之一。
- 直接(通过 SAP 应用服务器)。如果您选择此默认类型,请在以下字段中输入信息:SAP 应用服务器主机、SAP 系统编号和 SAP 路由器。
- 负载均衡(通过 SAP 消息服务器)。如果您选择此类型,请在以下字段中输入信息:SAP 消息服务器主机、SAP 消息服务器服务或端口号、SAP 系统 ID (SID) 和 SAP 登录组名称。
在 SAP 表/视图名称字段中,输入 SAP 系统中表或视图的名称。
提供 SAP 凭据:向 SAP 管理员索取 SAP 登录用户名和密码。
在 JCo 库 Cloud Storage 路径字段中,输入 Cloud Storage 中包含您上传的 SAP JCo 库文件的 SAP Java 连接器 (SAP JCo) 路径。
如需基于 SAP 的元数据生成架构,并将 SAP 数据类型映射到相应的 Cloud Data Fusion 数据类型,请点击获取架构。如需了解详情,请参阅数据类型映射。
可选:如需优化来自 SAP 的提取负载,请在以下字段中输入信息:
借助过滤选项,您可以根据选择条件(例如具有一组定义的值的列)提取记录。在
WHERE子句中以 OpenSQL 语法定义条件。例如,以下查询会返回Roster表中SchoolID列值为SchoolID > 52的所有行:SELECT * FROM Roster WHERE SchoolID > 52;如需了解详情,请参阅支持的过滤条件。
在要提取的行数字段中,您可以提供一个正整数来限制提取的数据行数。
在分片数字段中,您可以创建分区以并行提取数据记录,从而提高性能。拆分的数量会影响 SAP 工作进程,因此必须谨慎选择。
在软件包大小字段中,指定要在单个 SAP 网络调用中提取的记录数。软件包大小会影响性能和可用资源,因此必须谨慎选择。
可重复使用的连接
如需重复使用现有连接,请按以下步骤操作:
- 开启使用连接。
- 点击浏览连接。
点击连接名称。
如果不存在连接,请按以下步骤创建可重复使用的连接:
- 依次点击添加连接 > SapTable。
- 在打开的创建 SapTable 连接页面上,输入连接名称和说明。
- 在 SAP 客户端字段中,输入 SAP 中特定实例或环境的客户端名称。SAP 管理员可以提供客户端名称。
- 在 SAP 语言字段中,输入 SAP 登录语言。 默认值为 EN(英语)。
选择以下连接类型之一。
- 直接(通过 SAP 应用服务器)。如果您选择此默认类型,请在以下字段中输入信息:SAP 应用服务器主机、SAP 系统编号和 SAP 路由器。
- 负载均衡(通过 SAP 消息服务器)。如果您选择此类型,请在以下字段中输入信息:SAP 消息服务器主机、SAP 消息服务器服务或端口号、SAP 系统 ID (SID) 和 SAP 登录群组名称。
提供 SAP 凭据:向 SAP 管理员索取 SAP 登录用户名和密码值。
在 JCo 库 Cloud Storage 路径字段中,输入 Cloud Storage 中包含您上传的 SAP JCo 库文件的 SAP Java 连接器 (SAP JCo) 路径。
可选:在其他 SAP 连接属性字段中,输入必须替换 SAP JCo 默认值的键值对。
点击创建。
- 为 SAP Table 节点输入标签,例如
属性
| 属性 | 已启用宏 | 必需属性 | 说明 |
|---|---|---|---|
| 标签 | 否 | 是 | 数据流水线中节点的名称。 |
| 使用连接 | 否 | 否 | 使用可重用的连接。如果使用连接,则无需提供凭据。如需了解详情,请参阅管理连接。 |
| 参考名称 | 否 | 是 | 如果未开启使用连接,则会显示此字段。 用于谱系的连接的名称。 |
| 名称 | 否 | 是 | 如果使用连接处于开启状态,则会显示此字段。可重用连接的名称。 |
| 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 子句进行过滤。根据条件提取记录,例如列中具有一组定义的值或一系列值的记录。
如需了解详情,请参阅支持的过滤条件。 |
| 要提取的行数 | 是 | 否 | 限制提取的记录数量。
|
| 要生成的分片数 | 是 | 否 | 创建分区以并行提取记录。 运行时引擎会在提取记录时创建指定数量的分区(和 SAP 连接)。 增加此值时要小心,因为这会增加与 SAP 的并发连接数。 推荐:规划每个流水线的 SAP 连接数以及同时运行的流水线总数。 如果值为 0 或留空,Cloud Data Fusion 会根据可用的执行程序数量、要提取的记录以及软件包大小选择适当的值。 |
| 软件包大小 | 是 | 否 | 要在单个 SAP 网络调用中提取的记录数。这是每次网络提取调用期间 SAP 在内存中缓冲的记录数。 设置此属性时请谨慎操作。多个提取数据的数据流水线可能会使内存用量达到峰值,并可能因 Out of memory 错误而导致失败。
|
支持的过滤条件
支持以下过滤条件。
包含比较运算符的过滤条件
使用比较运算符,根据值之间的比较结果执行更复杂的过滤。
语法
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)
使用逻辑运算符组合多个条件的过滤条件
您可以使用逻辑运算符(例如 AND 和 OR)检索满足多个条件的行。
语法
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_DEC、DF16_RAW(数值) |
a | 十进制浮点 8 字节 IEEE 754r | 双精度 |
DF34_DEC、DF34_RAW(数值) |
e | 十进制浮点 16 字节 IEEE 754r | 双精度 |
FLTP(数值) |
f | 二进制浮点数 | 双精度 |
CHAR,LCHR(角色) |
c | 字符串 | 字符串 |
SSTRING,GEOM_EWKB(角色) |
字符串 | 字符串 | 字符串 |
STRING(字符) |
字符串 | 字符串 CLOB | 字节 |
NUMC,ACCP(角色) |
n | 数字文本 | 字符串 |
RAW、LRAW(字节) |
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 端进程。
后续步骤
- 详细了解 SAP on Google Cloud。