使用 Azure 数据工厂或 Azure Synapse Analytics 从 SAP 表复制数据
适用于:Azure 数据工厂 Azure Synapse Analytics
本文概述如何使用 Azure 数据工厂和 Azure Synapse Analytics 管道中的复制活动从 SAP 表复制数据。 有关详细信息,请参阅复制活动概述。
提示
若要了解对 SAP 数据集成方案的总体支持,请参阅使用 Azure 数据工厂进行 SAP 数据集成白皮书,其中包含有关每个 SAP 连接器的详细介绍、比较和指导。
支持的功能
此 SAP 表连接器支持以下功能:
支持的功能 | IR |
---|---|
复制活动(源/-) | ② |
Lookup 活动 | ② |
① Azure 集成运行时 ② 自承载集成运行时
有关复制活动支持作为源或接收器的数据存储列表,请参阅支持的数据存储表。
具体而言,此 SAP 表连接器支持:
在以下产品中从 SAP 表复制数据:
- SAP ERP 中心组件 (SAP ECC) 7.01 或更高版本(包含在 2015 年之后发布的最新 SAP 支持包堆栈中)。
- SAP Business Warehouse (SAP BW) 版本 7.01 或更高版本(位于最新的 SAP 支持包堆栈中,该堆栈是 2015 年以后发布的)。
- SAP S/4HANA。
- SAP Business Suite 版本 7.01 或更高版本(位于最新的 SAP 支持包堆栈中,该堆栈是 2015 年以后发布的)中的其他产品。
从 SAP 透明表、共用表、聚集表和视图复制数据。
使用基本身份验证或安全网络通信 (SNC)(如果已配置 SNC)复制数据。
连接到 SAP 应用程序服务器或 SAP 消息服务器。
通过默认或自定义 RFC 检索数据。
版本 7.01 或更高版本指 SAP NetWeaver 版本,而不是 SAP ECC 版本。 例如,SAP ECC 6.0 EHP 7 的 NetWeaver 版本通常 >=7.4。 如果你不确定自己的环境,请在 SAP 系统中执行以下步骤来确认版本:
- 使用 SAP GUI 连接到 SAP 系统。
- 转至“系统”->“状态”。
- 检查 SAP_BASIS 的版本,确保它等于或大于 701。
先决条件
若要使用此 SAP 表连接器,需要:
安装自承载集成运行时(3.17 或更高版本)。 有关详细信息,请参阅创建和配置自承载集成运行时。
从 SAP 网站下载 64 位 SAP Connector for Microsoft .NET 3.0,并将其安装到自承载集成运行时计算机上。 安装期间,请在“可选安装步骤”窗口中确保选择“将程序集安装到 GAC”选项。
在 SAP 表连接器中使用的 SAP 用户必须拥有以下权限:
- 使用远程函数调用 (RFC) 目标的授权。
- 对 S_SDSAUTH 授权对象拥有“执行”活动权限。 有关多数授权对象,请参阅“SAP 说明 460089”。 基础 NCo 连接器需要某些 RFC,例如 RFC_FUNCTION_SEARCH。
入门
若要使用管道执行复制活动,可以使用以下工具或 SDK 之一:
使用 UI 创建指向 SAP 表的链接服务
使用以下步骤在 Azure 门户 UI 中创建指向 SAP 表的链接服务。
浏览到 Azure 数据工厂或 Synapse 工作区中的“管理”选项卡并选择“链接服务”,然后单击“新建”:
搜索“SAP”并选择“SAP 表连接器”。
配置服务详细信息、测试连接并创建新的链接服务。
连接器配置详细信息
以下部分详细介绍了用于定义特定于 SAP 表连接器的实体的属性。
链接服务属性
SAP BW Open Hub 链接服务支持以下属性:
属性 | 描述 | 必选 |
---|---|---|
type |
type 属性必须设置为 SapTable 。 |
是 |
server |
SAP 实例所在的服务器的名称。 用于连接到 SAP 应用程序服务器。 |
否 |
systemNumber |
SAP 系统的系统编号。 用于连接到 SAP 应用程序服务器。 允许的值:用字符串表示的两位十进制数。 |
否 |
messageServer |
SAP 消息服务器的主机名。 用于连接到 SAP 消息服务器。 |
否 |
messageServerService |
消息服务器的服务名称或端口号。 用于连接到 SAP 消息服务器。 |
否 |
systemId |
表所在的 SAP 系统的 ID。 用于连接到 SAP 消息服务器。 |
否 |
logonGroup |
SAP 系统的登录组。 用于连接到 SAP 消息服务器。 |
否 |
clientId |
SAP 系统中客户端的 ID。 允许的值:用字符串表示的三位十进制数。 |
是 |
language |
SAP 系统使用的语言。 默认值为 EN 。 |
否 |
userName |
有权访问 SAP 服务器的用户名。 | 是 |
password |
用户的密码。 将此字段标记为 SecureString 类型以安全地存储它,或引用存储在 Azure 密钥保管库中的机密。 |
是 |
sncMode |
用于访问表所在的 SAP 服务器的 SNC 激活指示符。 若要使用 SNC 连接到 SAP 服务器,可以使用此属性。 允许的值为 0 (关闭,默认值)或 1 (打开)。 |
否 |
sncMyName |
用于访问表所在的 SAP 服务器的发起方 SNC 名称。 当 sncMode 打开时适用。 |
否 |
sncPartnerName |
用于访问表所在的 SAP 服务器的通信合作伙伴 SNC 名称。 当 sncMode 打开时适用。 |
否 |
sncLibraryPath |
用于访问表所在的 SAP 服务器的外部安全产品库。 当 sncMode 打开时适用。 |
否 |
sncQop |
要应用的保护级别的 SNC 质量。 当 sncMode 打开时适用。 允许的值为 1 (身份验证)、2 (完整性)、3 (隐私)、8 (默认值)和 9 (最大值)。 |
否 |
connectVia |
用于连接到数据存储的集成运行时。 如前面的先决条件中所述,需要安装自承载集成运行时。 | 是 |
示例 1:连接到 SAP 应用程序服务器
{
"name": "SapTableLinkedService",
"properties": {
"type": "SapTable",
"typeProperties": {
"server": "<server name>",
"systemNumber": "<system number>",
"clientId": "<client ID>",
"userName": "<SAP user>",
"password": {
"type": "SecureString",
"value": "<Password for SAP user>"
}
},
"connectVia": {
"referenceName": "<name of Integration Runtime>",
"type": "IntegrationRuntimeReference"
}
}
}
示例 2:连接到 SAP 消息服务器
{
"name": "SapTableLinkedService",
"properties": {
"type": "SapTable",
"typeProperties": {
"messageServer": "<message server name>",
"messageServerService": "<service name or port>",
"systemId": "<system ID>",
"logonGroup": "<logon group>",
"clientId": "<client ID>",
"userName": "<SAP user>",
"password": {
"type": "SecureString",
"value": "<Password for SAP user>"
}
},
"connectVia": {
"referenceName": "<name of integration runtime>",
"type": "IntegrationRuntimeReference"
}
}
}
示例 3:使用 SNC 进行连接
{
"name": "SapTableLinkedService",
"properties": {
"type": "SapTable",
"typeProperties": {
"server": "<server name>",
"systemNumber": "<system number>",
"clientId": "<client ID>",
"userName": "<SAP user>",
"password": {
"type": "SecureString",
"value": "<Password for SAP user>"
},
"sncMode": 1,
"sncMyName": "<SNC myname>",
"sncPartnerName": "<SNC partner name>",
"sncLibraryPath": "<SNC library path>",
"sncQop": "8"
},
"connectVia": {
"referenceName": "<name of integration runtime>",
"type": "IntegrationRuntimeReference"
}
}
}
数据集属性
有关用于定义数据集的各个部分和属性的完整列表,请参阅数据集。 以下部分提供 SAP 表数据集支持的属性的列表。
支持使用以下属性从/向 SAP BW Open Hub 链接服务复制数据。
属性 | 描述 | 必选 |
---|---|---|
type |
type 属性必须设置为 SapTableResource 。 |
是 |
tableName |
要从中复制数据的 SAP 表的名称。 | 是 |
示例
{
"name": "SAPTableDataset",
"properties": {
"type": "SapTableResource",
"typeProperties": {
"tableName": "<SAP table name>"
},
"schema": [],
"linkedServiceName": {
"referenceName": "<SAP table linked service name>",
"type": "LinkedServiceReference"
}
}
}
复制活动属性
有关用于定义活动的各部分和属性的完整列表,请参阅管道。 以下部分提供 SAP 表源支持的属性的列表。
SAP 表作为源
支持使用以下属性从 SAP 表复制数据:
属性 | 描述 | 必选 |
---|---|---|
type |
type 属性必须设置为 SapTableSource 。 |
是 |
rowCount |
要检索的行数。 | 否 |
rfcTableFields |
要从 SAP 表复制的字段(列)。 例如,column0, column1 。 |
否 |
rfcTableOptions |
用于筛选 SAP 表中的行的选项。 例如,COLUMN0 EQ 'SOMEVALUE' 。 另请参阅本文稍后提供的 SAP 查询运算符表。 |
否 |
customRfcReadTableFunctionModule |
可用于从 SAP 表读取数据的自定义 RFC 函数模块。 可以使用自定义 RFC 函数模块来定义如何从 SAP 系统检索数据并将其返回到服务。 必须为自定义函数模块实现一个接口(导入、导出、表),类似于服务使用的默认接口 /SAPDS/RFC_READ_TABLE2 。 |
否 |
partitionOption |
要从 SAP 表中读取的分区机制。 支持的选项包括:
|
否 |
partitionColumnName |
用于将数据分区的列的名称。 | 否 |
partitionUpperBound |
partitionColumnName 中指定的用于继续分区的列的最大值。 |
否 |
partitionLowerBound |
partitionColumnName 中指定的用于继续分区的列的最小值。 (注意:当分区选项为 PartitionOnInt 时,partitionLowerBound 不能为“0”) |
否 |
maxPartitionsNumber |
要将数据拆分成的最大分区数。 默认值为 1。 | 否 |
sapDataColumnDelimiter |
单个字符,将用作传递给 SAP RFC 的分隔符,以用于拆分输出数据。 | 否 |
提示
如果 SAP 表包含大量数据(例如几十亿行),请使用 partitionOption
和 partitionSetting
将数据拆分成小分区。 在这种情况下,将按分区读取数据,并通过单个 RFC 调用从 SAP 服务器检索每个数据分区。
以 partitionOption
和 partitionOnInt
为例,每个分区中的行数的计算公式为:(处于 partitionUpperBound
与 partitionLowerBound
之间的总行数)/maxPartitionsNumber
。
若要并行加载数据分区以加快复制速度,并行程度由复制活动的 parallelCopies
设置控制。 例如,如果将 parallelCopies
设置为 4,则该服务会根据指定的分区选项和设置并行生成并运行 4 个查询,每个查询从 SAP 表检索一部分数据。 强烈建议将 maxPartitionsNumber
设为 parallelCopies
属性值的倍数。 将数据复制到基于文件的数据存储中时,还建议将数据作为多个文件写入文件夹(仅指定文件夹名称),在这种情况下,性能优于写入单个文件。
提示
默认情况下,为服务中的 SAP 表连接器启用了 BASXML
。
在 rfcTableOptions
中,可以使用以下常用 SAP 查询运算符来筛选行:
运算符 | 说明 |
---|---|
EQ |
等于 |
NE |
不等于 |
LT |
小于 |
LE |
小于或等于 |
GT |
大于 |
GE |
大于或等于 |
IN |
例如 TABCLASS IN ('TRANSP', 'INTTAB') |
LIKE |
例如 LIKE 'Emma%' |
示例
"activities":[
{
"name": "CopyFromSAPTable",
"type": "Copy",
"inputs": [
{
"referenceName": "<SAP table input dataset name>",
"type": "DatasetReference"
}
],
"outputs": [
{
"referenceName": "<output dataset name>",
"type": "DatasetReference"
}
],
"typeProperties": {
"source": {
"type": "SapTableSource",
"partitionOption": "PartitionOnInt",
"partitionSettings": {
"partitionColumnName": "<partition column name>",
"partitionUpperBound": "2000",
"partitionLowerBound": "1",
"maxPartitionsNumber": 500
}
},
"sink": {
"type": "<sink type>"
},
"parallelCopies": 4
}
}
]
联接 SAP 表
SAP 表连接器目前仅支持单个具有默认函数模块的表。 若要获取多个表的联接数据,可以按照以下步骤利用 SAP 表连接器中的 customRfcReadTableFunctionModule 属性。
- 编写自定义函数模块,该模块可将查询作为 OPTIONS,并应用你自己的逻辑来检索数据。
- 对于“自定义函数模块”,请输入自定义函数模块的名称。
- 对于“RFC 表选项”,请指定要作为 OPTIONS 提供给函数模块的表联接语句,例如“
<TABLE1>
INNER JOIN<TABLE2>
ON COLUMN0”。
下面是一个示例:
提示
还可考虑将联接数据聚合在 VIEW 中,这受 SAP 表连接器支持。 还可尝试将相关的表提取并载入到 Azure 上(例如,Azure 存储和 Azure SQL 数据库),然后使用数据流进行进一步联接或筛选。
创建自定义函数模块
对于 SAP 表,我们目前支持复制源中的 customRfcReadTableFunctionModule 属性,这允许你利用自己的逻辑和流程数据。
作为快速入门指南,以下是开始使用“自定义函数模块”的一些要求:
定义:
将数据导出到下表之一:
以下是有关 SAP 表连接器如何与自定义函数模块一起工作的说明:
通过 SAP NCO 与 SAP 服务器建立连接。
调用“自定义函数模块”,并将参数设置如下:
- QUERY_TABLE:在 SAP 表数据集中设置的表名称;
- Delimiter:在 SAP 表源中设置的分隔符;
- ROWCOUNT/Option/Fields:在表源中设置的行计数/聚合选项/字段。
获取结果并按以下方式分析数据:
分析字段表中的值以获取架构。
获取输出表中的值,以查看哪个表包含这些值。
获取 OUT_TABLE 中的值,分析数据,然后将其写入接收器。
SAP 表的数据类型映射
从 SAP 表复制数据时,将使用以下从 SAP 表数据类型到服务中所用临时数据类型的映射。 若要了解复制活动如何将源架构和数据类型映射到接收器,请参阅架构和数据类型映射。
SAP ABAP 类型 | 服务临时数据类型 |
---|---|
C (字符串) |
String |
I (整数) |
Int32 |
F (浮点数) |
Double |
D (日期) |
String |
T (时间) |
String |
P (BCD Packed、货币、小数、数量) |
Decimal |
N (数字) |
String |
X (二进制和原始数据) |
String |
Lookup 活动属性
若要了解有关属性的详细信息,请查看 Lookup 活动。
相关内容
有关复制活动支持作为源和接收器的数据存储的列表,请参阅支持的数据存储。