使用 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
複製活動 (source/-)
查閱活動

(1) Azure 整合執行時間 (2) 自我裝載整合執行時間

如需複製活動支援做為來源或接收的資料存放區清單,請參閱 支援的資料存放區 資料表。

具體而言,此 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 系統確認版本的步驟:

  1. 使用 SAP GUI 連線到 SAP 系統。
  2. 移至 [系統 - > 狀態 ]。
  3. 檢查SAP_BASIS的版本,確定其等於或大於 701。
    Check SAP_BASIS

必要條件

若要使用此 SAP 資料表連接器,您需要:

  • 設定自我裝載整合執行時間(3.17 版或更新版本)。 如需詳細資訊,請參閱 建立及設定自我裝載整合執行時間

  • 從 SAP 網站下載適用于 Microsoft .NET 3.0 的 64 位 SAP 連線or,並將其安裝在自我裝載整合執行時間電腦上。 在安裝期間,請確定您在 [選擇性安裝步驟 ] 視窗中選取 [將元件安裝至 GAC ] 選項

    Install SAP Connector for .NET

  • 在 SAP 資料表連接器中使用的 SAP 使用者必須具有下列許可權:

    • 使用遠端函式呼叫 (RFC) 目的地的授權。
    • S_SDSAUTH授權物件的 Execute 活動許可權。 您可以在多數授權物件上參考 SAP 附注460089。 基礎 NCo 連接器需要某些 RFC,例如RFC_FUNCTION_SEARCH。

開始使用

若要使用管線執行複製活動,您可以使用下列其中一個工具或 SDK:

使用 UI 建立 SAP 資料表的連結服務

使用下列步驟,在 Azure 入口網站 UI 中建立 SAP 資料表的連結服務。

  1. 流覽至 Azure Data Factory 或 Synapse 工作區中的 [管理] 索引標籤,然後選取 [連結服務],然後按一下 [新增]:

  2. 搜尋 SAP 並選取 SAP 資料表連接器。

    Screenshot of the SAP table connector.

  3. 設定服務詳細資料、測試連線,並建立新的連結服務。

    Screenshot of configuration for an SAP table linked service.

連線or 組態詳細資料

下列各節提供屬性的相關詳細資料,這些屬性是用來定義 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 金鑰保存庫 中的秘密。 Yes
sncMode 用來存取資料表所在 SAP 伺服器的 SNC 啟用指示器。
如果您想要使用 SNC 連線到 SAP 伺服器,請使用 。
允許的值為 0 (off、 default) 或 1 (on)。
No
sncMyName 啟動器的 SNC 名稱,用來存取資料表所在的 SAP 伺服器。
在 開啟時 sncMode 適用。
No
sncPartnerName 通訊夥伴的 SNC 名稱,可存取資料表所在的 SAP 伺服器。
在 開啟時 sncMode 適用。
No
sncLibraryPath 外部安全性產品的程式庫,可存取資料表所在的 SAP 伺服器。
在 開啟時 sncMode 適用。
No
sncQop 要套用的 SNC 保護品質等級。
當 為 [開啟] 時 sncMode 適用。
允許的值為 1 (驗證)、(完整性)、 23 (隱私權)、 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 連結服務複製資料,支援下列屬性:

屬性 描述 必要
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 資料表讀取的資料分割機制。 支援的選項包括:
  • None
  • PartitionOnInt (左邊有零填補的一般整數或整數值,例如 0000012345
  • PartitionOnCalendarYear (格式為 「YYYY」 的 4 位數)
  • PartitionOnCalendarMonth (格式為 「YYYYMM」 的 6 位數)
  • PartitionOnCalendarDate (格式為 「YYYYMMDD」 的 8 位數)
  • PartitionOntime (格式為 「HHMMSS」 的 6 位數,例如 235959
No
partitionColumnName 用來分割資料的資料行名稱。 No
partitionUpperBound 中所 partitionColumnName 指定資料行的最大值,將用來繼續資料分割。 No
partitionLowerBound 中所 partitionColumnName 指定資料行的最小值,將用來繼續資料分割。 (注意: partitionLowerBound 當分割區選項為 PartitionOnInt 時,不能是 「0」 No
maxPartitionsNumber 要分割資料的資料分割數目上限。 預設值是 1。 No
sapDataColumnDelimiter 做為傳遞至 SAP RFC 之分隔符號的單一字元,用來分割輸出資料。 No

提示

如果您的 SAP 資料表有大量資料,例如數十億個數據列,請使用 partitionOptionpartitionSetting 將資料分割成較小的分割區。 在此情況下,每個分割區都會讀取資料,而且每個資料分割都會透過單一 RFC 呼叫從 SAP 伺服器擷取。

partitionOption 範例為例 partitionOnInt ,每個分割區中的資料列數目是使用此公式計算的:(介於 和 partitionLowerBound 之間 maxPartitionsNumber 的總 partitionUpperBound 資料列數。

若要平行載入資料分割以加速複製,平行度是由複製活動上的設定所 parallelCopies 控制。 例如,如果您設定 parallelCopies 為 4,服務會根據指定的分割區選項和設定,同時產生並執行四個查詢,而每個查詢都會從 SAP 資料表擷取部分資料。 我們強烈建議建立 maxPartitionsNumber 屬性值的 parallelCopies 倍數。 將資料複製到檔案型資料存放區時,也會重新命令將資料夾寫入為多個檔案(僅指定資料夾名稱),在此情況下效能優於寫入單一檔案。

提示

BASXML預設會針對服務內的這個 SAP 資料表連接器啟用 。

在 中 rfcTableOptions ,您可以使用下列常見的 SAP 查詢運算子來篩選資料列:

運算子 描述
EQ 等於
NE 不等於
LT 小於
LE 小於或等於
GT 大於
GE 大於或等於
IN 和 in 一樣 TABCLASS IN ('TRANSP', 'INTTAB')
LIKE 和 in 一樣 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 資料表選項」,指定要饋送至函式模組的資料表聯結語句,例如 「 <TABLE1> INNER JOIN <TABLE2> ON COLUMN0」。

範例如下:

Sap Table Join

提示

您也可以考慮在 VIEW 中匯總聯結的資料,這是 SAP 資料表連接器所支援。 您也可以嘗試擷取相關資料表以上線到 Azure(例如Azure 儲存體、Azure SQL 資料庫),然後使用資料流程繼續進行進一步的聯結或篩選。

建立自訂函式模組

針對 SAP 資料表,我們目前支援 複製來源中的 customRfcReadTableFunctionModule 屬性,這可讓您利用自己的邏輯和處理資料。

作為快速指引,以下是開始使用「自訂函式模組」的一些需求:

  • 定義:

    Definition

  • 將資料匯出至下列其中一個資料表:

    Export table 1

    Export table 2

以下是 SAP 資料表連接器如何與自訂函式模組搭配運作的圖例:

  1. 透過 SAP NCO 建置與 SAP 伺服器的連線。

  2. 使用下列設定的參數叫用 「自訂函式模組」:

    • QUERY_TABLE:您在 SAP 資料表資料集中設定的資料表名稱;
    • 分隔符號:您在 SAP 資料表來源中設定的分隔符號;
    • ROWCOUNT/Option/Fields:您在資料表來源中設定的 Rowcount/Aggregated Option/Fields。
  3. 取得結果,並以下列方式剖析資料:

    1. 剖析 Fields 資料表中的值以取得架構。

      Parse values in Fields

    2. 取得輸出資料表的值,以查看哪些資料表包含這些值。

      Get values in output table

    3. 取得OUT_TABLE中的值、剖析資料,然後將它寫入接收中。

SAP 資料表的資料類型對應

當您從 SAP 資料表複製資料時,下列對應會從 SAP 資料表資料類型使用到服務中使用的過渡資料類型。 若要瞭解複製活動如何將來源架構和資料類型對應至接收,請參閱 架構和資料類型對應

SAP ABAP 類型 服務過渡期資料類型
C (字串) String
I (整數) Int32
F (浮點數) Double
D (日期) String
T (時間) String
P (BCD Packed, Currency, Decimal, Qty) Decimal
N (數值) String
X (二進位和原始) String

查閱活動屬性

若要瞭解屬性的詳細資料,請檢查 查閱活動

如需複製活動支援作為來源和接收的資料存放區清單,請參閱 支援的資料存放區