使用 Azure Data Factory 或 Azure Synapse Analytics 從 SAP 資料表複製資料
適用於:Azure Data Factory Azure Synapse Analytics
提示
試用 Microsoft Fabric 中的 Data Factory,這是適用於企業的全方位分析解決方案。 Microsoft Fabric 涵蓋從資料移動到資料科學、即時分析、商業智慧和報告的所有項目。 了解如何免費開始新的試用!
本文概述如何使用 Azure Data Factory 和 Azure Synapse Analytics 管線中的複製活動,從 SAP 資料庫複製資料。 如需詳細資訊,請參閱複製活動概觀。
提示
若要了解在 SAP 資料整合案例上的整體支援,請參閱使用 Azure Data Factory 的 SAP 資料整合白皮書,其中提供每個 SAP 連接器的詳細簡介、比較和指引。
支援的功能
此 SAP 資料表連接器支援下列功能:
支援的功能 | IR |
---|---|
複製活動 (來源/-) | ② |
查閱活動 | ② |
① Azure 整合執行階段 ② 自我裝載整合執行階段
如需複製活動所支援做為來源或接收器的資料存放區清單,請參閱支援的資料存放區資料表。
具體而言,此 SAP 資料表連接器支援:
在下列位置從 SAP 資料表複製資料:
- SAP ERP Central Component (SAP ECC) 7.01 版或更新版本 (在 2015 年之後發行的 SAP 支援套件堆疊)。
- SAP Business Warehouse (SAP BW) 7.01 版或更新版本 (位於 2015 年之後發行的最新 SAP 支援套件堆疊中)。
- SAP S/4HANA。
- SAP Business Suite 7.01 版或更新版本中的其他產品 (位於 2015 年之後發行的最新 SAP 支援套件堆疊中)。
從 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 Data Factory 或 Synapse 工作區的 [管理] 索引標籤,選取 [連結服務],然後按一下 [新增]:
搜尋 SAP 並選取 SAP 資料表連接器。
設定服務詳細資料,測試連線,然後建立新的連結服務。
連接器設定詳細資料
下列各節將針對用來定義 SAP 資料表連接器特定實體的屬性提供相關詳細資料。
連結服務屬性
SAP BW Open Hub 連結服務支援下列屬性:
屬性 | 描述 | 必要 |
---|---|---|
type |
type 屬性必須設為 SapTable 。 |
Yes |
server |
SAP 執行個體所在的伺服器名稱。 用來連線到 SAP 應用程式伺服器。 |
No |
systemNumber |
SAP 系統的系統編號。 用來連線到 SAP 應用程式伺服器。 允許的值:以字串表示的二位數十進位數字。 |
No |
messageServer |
SAP 訊息伺服器的主機名稱。 用來連線到 SAP 訊息伺服器。 |
No |
messageServerService |
訊息伺服器的服務名稱或連接埠號碼。 用來連線到 SAP 訊息伺服器。 |
No |
systemId |
資料表所在 SAP 系統的識別碼。 用來連線到 SAP 訊息伺服器。 |
No |
logonGroup |
SAP 系統的登入群組。 用來連線到 SAP 訊息伺服器。 |
No |
clientId |
SAP 系統中的用戶端識別碼。 允許的值:以字串表示的三位數十進位數字。 |
Yes |
language |
SAP 系統使用的語言。 預設值為 EN 。 |
No |
userName |
能夠存取 SAP 伺服器的使用者名稱。 | Yes |
password |
使用者的密碼。 將此欄位標記為 SecureString 以將其安全地儲存,或參考 Azure Key Vault 中儲存的祕密。 |
Yes |
sncMode |
用來存取資料表所在 SAP 伺服器的 SNC 啟用指標。 如果您想要使用 SNC 連線到 SAP 伺服器,則請使用。 允許的值為 0 (關閉,預設值) 或 1 (開啟)。 |
No |
sncMyName |
啟動器的 SNC 名稱,用來存取資料表所在的 SAP 伺服器。 在 sncMode 開啟時套用。 |
No |
sncPartnerName |
通訊合作夥伴的 SNC 名稱,用來存取資料表所在的 SAP 伺服器。 在 sncMode 開啟時套用。 |
No |
sncLibraryPath |
外部安全性產品的程式庫,可存取資料表所在的 SAP 伺服器。 在 sncMode 開啟時套用。 |
No |
sncQop |
要套用的 SNC 保護品質層級。 在 sncMode 開啟時套用。 允許的值為 1 (驗證)、2 (完整性)、3 (隱私權)、8 (預設)、9 (最大值)。 |
No |
connectVia |
用來連線到資料存放區的整合執行階段。 如稍早必要條件中所述,必須要有一個自我裝載整合執行階段。 | Yes |
範例 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 連結服務複製資料或將資料複製到 SAP BW Open Hub 連結服務,支援下列屬性:
屬性 | 描述 | 必要 |
---|---|---|
type |
type 屬性必須設為 SapTableResource 。 |
Yes |
tableName |
要複製資料的來源 SAP 資料表名稱。 | Yes |
範例
{
"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 。 |
Yes |
rowCount |
要擷取的資料列數。 | No |
rfcTableFields |
要從 SAP 資料表複製的欄位 (資料行)。 例如: column0, column1 。 |
No |
rfcTableOptions |
可篩選 SAP 資料表中資料列的選項。 例如: COLUMN0 EQ 'SOMEVALUE' 。 另請參閱本文稍後的 SAP 查詢運算子資料表。 |
No |
customRfcReadTableFunctionModule |
自訂 RFC 函式模組,可用來從 SAP 資料表讀取資料。 您可以使用自訂 RFC 函式模組來定義從 SAP 系統擷取資料並將資料傳回至服務的方式。 自訂函式模組必須實作介面 (匯入、匯出、資料表) 類似於 /SAPDS/RFC_READ_TABLE2 ,這是服務所使用的預設介面。 |
No |
partitionOption |
要從 SAP 資料表讀取的分割機制。 支援的選項包括:
|
No |
partitionColumnName |
用來分割資料的資料行名稱。 | No |
partitionUpperBound |
partitionColumnName 中所指定資料行的最大值,將用來繼續進行分割。 |
No |
partitionLowerBound |
partitionColumnName 中所指定資料行的最小值,將用來繼續進行分割。 (注意:當分割選項為 PartitionOnInt 時,partitionLowerBound 不能是「0」) |
No |
maxPartitionsNumber |
要分割資料的最大分割區數目。 預設值是 1。 | No |
sapDataColumnDelimiter |
已將用做為分隔符號的單一字元,傳遞到 SAP RFC 以分割輸出資料。 | No |
提示
如果您的 SAP 資料表有大量資料,例如數十億個資料列,請使用 partitionOption
和 partitionSetting
將資料分割成較小的分割區。 在此情況下,會依每個分割區讀取資料,而且會透過單一 RFC 呼叫從 SAP 伺服器擷取每個資料分割。
以 partitionOption
做為 partitionOnInt
為例,每個分割區中的資料列數目會以此公式計算:(總資料列落在 partitionUpperBound
與 partitionLowerBound
)/maxPartitionsNumber
之間。
若要平行載入資料分割以加速複製,平行程度是由複製活動上的 parallelCopies
設定所控制。 例如,如果您將 parallelCopies
設定為 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 Database),然後使用資料流程繼續進行進一步的聯結或篩選。
建立自訂函式模組
針對 SAP 資料表,我們目前支援複製來源中的 customRfcReadTableFunctionModule 屬性,這可讓您利用自己的邏輯和處理資料。
做為快速指引,以下是開始使用「自訂函式模組」的一些需求:
定義:
將資料匯出至下列其中一個資料表:
以下是 SAP 資料表連接器與自訂函式模組搭配使用方式的圖例:
透過 SAP NCO 建置與 SAP 伺服器的連線。
使用設定如下的參數叫用「自訂函式模組」:
- QUERY_TABLE:您在 SAP 資料表資料集中所設定資料表的名稱;
- 分隔符號:您在 SAP 資料表來源中設定的分隔符號;
- ROWCOUNT/Option/Fields:您在資料表來源中設定的 Rowcount/Aggregated Option/Fields。
取得結果,並以下列方式剖析資料:
剖析 Fields 資料表中的值以取得結構描述。
取得輸出資料表的值,以查看哪個資料表包含這些值。
取得 OUT_TABLE 中的值、剖析資料,然後將其寫入接收器。
SAP 資料表的資料類型對應
當您從 SAP 資料表複製資料時,從 SAP 資料表資料類型到服務中使用的過渡資料類型會使用下列對應。 若要了解複製活動如何將來源結構描述和資料類型對應至接收,請參閱結構描述和資料類型對應。
SAP ABAP 類型 | 服務過渡資料類型 |
---|---|
C (字串) |
String |
I (整數) |
Int32 |
F (浮動) |
Double |
D (日期) |
String |
T (時間) |
String |
P (BCD 封裝、貨幣、小數、數量) |
Decimal |
N (數值) |
String |
X (二進位和 Raw) |
String |
查閱活動屬性
若要了解屬性的詳細資料,請參閱查閱活動。
相關內容
如需複製活動支援做為來源和接收器的資料存放區清單,請參閱支援的資料存放區。