您可以使用 SAP 資料表批次來源外掛程式 (SAP 資料表外掛程式),從 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 以上版本 |
如要進一步瞭解 Google Cloud上的 SAP,請參閱「 Google Cloud上的 SAP 總覽」。
事前準備
設定 SAP Table 外掛程式使用的下列系統和服務:
- 設定 SAP ERP 系統。
這個程序包含下列步驟:
- 安裝 SAP 傳輸檔案。
- 設定必要的 SAP 授權和角色。
- 設定 SAP Java Connector。
-
- 重要事項:請選擇與 Cloud Data Fusion 版本相容的外掛程式版本。
- 如果升級 Cloud Data Fusion 執行個體或外掛程式的版本,請評估變更對管道功能範圍和效能的影響。
在 Cloud Data Fusion 和 SAP 之間建立 RFC 連線。
- 確認 Cloud Data Fusion 執行個體與 SAP 伺服器之間的通訊已啟用。
- 如果是私人執行個體,請設定 虛擬私有雲網路對等互連。
- SAP 系統和 Cloud Data Fusion 執行個體必須位於同一個專案。
設定外掛程式
- 前往 Cloud Data Fusion 網頁介面,然後點選「Studio」。
- 確認已選取「Data Pipeline - Batch」(資料管道 - 批次),而非「Realtime」(即時)。
- 在「來源」選單中,按一下「SAP 資料表」。SAP 資料表節點會顯示在管道中。
- 如要設定來源,請前往 SAP Table 節點,然後按一下「Properties」(屬性)。
輸入下列屬性。如需完整清單,請參閱「屬性」。
- 輸入 SAP Table 節點的「標籤」,例如
SAP tables。 輸入連線詳細資料。您可以設定新的單次連線,或是現有的可重複使用連線。
新連結
如要新增與 SAP 的一次性連線,請按照下列步驟操作:
- 請關閉「使用連線」。
在「連線」專區中,在下列欄位中輸入 SAP 帳戶的資訊:
- 在「Reference name」(參照名稱) 欄位中,輸入連線的名稱,以識別這個沿襲來源。
- 在「SAP client」欄位中,輸入 SAP 內特定執行個體或環境的用戶端名稱。SAP 管理員可以提供用戶端名稱。
- 在「SAP language」(SAP 語言) 欄位中,輸入 SAP 登入語言。 預設值為 EN (英文)。
選取下列其中一種連線類型。
- 直接 (透過 SAP 應用程式伺服器)。如果選擇這個預設類型,請在下列欄位中輸入資訊:「SAP 應用程式伺服器主機」、「SAP 系統編號」和「SAP 路由器」。
- 已平衡負載 (透過 SAP 訊息伺服器)。如果選擇這個類型,請在下列欄位中輸入資訊:SAP 訊息伺服器主機、SAP 訊息伺服器服務或連接埠號碼、SAP 系統 ID (SID) 和 SAP 登入群組名稱。
在「SAP table/view name」(SAP 資料表/檢視畫面名稱) 欄位中,輸入 SAP 系統中的資料表或檢視畫面名稱。
提供 SAP 憑證:向 SAP 管理員索取 SAP 登入使用者名稱和密碼。
在「JCo Library Cloud Storage path」(JCo 程式庫 Cloud Storage 路徑) 欄位中,輸入 Cloud Storage 中 SAP Java Connector (SAP JCo) 的路徑,其中包含您上傳的 SAP JCo 程式庫檔案。
如要根據 SAP 的中繼資料產生結構定義,將 SAP 資料類型對應至相應的 Cloud Data Fusion 資料類型,請按一下「取得結構定義」。詳情請參閱「資料類型對應」。
選用步驟:如要最佳化 SAP 的擷取負載,請在下列欄位中輸入資訊:
使用「篩選選項」,即可根據選取條件 (例如具有一組已定義值的資料欄) 擷取記錄。在
WHERE子句中,以 OpenSQL 語法定義條件。舉例來說,這項查詢會從Roster資料表傳回所有資料列,其中SchoolID資料欄的值為SchoolID > 52:SELECT * FROM Roster WHERE SchoolID > 52;詳情請參閱「支援的篩選器」。
在「要擷取的資料列數」欄位中,您可以提供正整數的資料列數,限制擷取的資料。
在「分割數」欄位中,您可以建立分割區來平行擷取資料記錄,進而提升效能。分割數量可能會影響 SAP 工作程序,因此請謹慎選取。
在「封裝大小」欄位中,指定要在單一 SAP 網路呼叫中擷取的記錄數量。套件大小會影響效能和可用資源,因此請謹慎選取。
可重複使用的連線
如要重複使用現有連線,請按照下列步驟操作:
- 開啟「使用連線」。
- 按一下「Browse connections」(瀏覽連線)。
按一下連線名稱。
如果沒有連線,請按照下列步驟建立可重複使用的連線:
- 依序點選「新增連線」>「SapTable」。
- 在隨即開啟的「Create a SapTable connection」(建立 SapTable 連線) 頁面中,輸入連線名稱和說明。
- 在「SAP client」(SAP 用戶端) 欄位中,輸入 SAP 中特定執行個體或環境的用戶端名稱。SAP 管理員可以提供用戶端名稱。
- 在「SAP language」(SAP 語言) 欄位中,輸入 SAP 登入語言。 預設值為 EN (英文)。
選取下列其中一種連線類型。
- 直接 (透過 SAP 應用程式伺服器)。如果選擇這個預設類型,請在下列欄位中輸入資訊:SAP 應用程式伺服器主機、SAP 系統編號和 SAP 路由器。
- 已平衡負載 (透過 SAP 訊息伺服器)。如果選擇這個類型,請在下列欄位中輸入資訊:SAP 訊息伺服器主機、SAP 訊息伺服器服務或連接埠號碼、SAP 系統 ID (SID),以及 SAP 登入群組名稱。
提供 SAP 憑證:請 SAP 管理員提供 SAP 登入使用者名稱和密碼值。
在「JCo Library Cloud Storage path」(JCo 程式庫 Cloud Storage 路徑) 欄位中,輸入 Cloud Storage 中的 SAP Java Connector (SAP JCo) 路徑,其中包含您上傳的 SAP JCo 程式庫檔案。
選用:在「Additional SAP connection properties」(其他 SAP 連線屬性) 欄位中,輸入必須覆寫 SAP JCo 預設值的鍵/值組合。
點選「建立」。
- 輸入 SAP Table 節點的「標籤」,例如
屬性
| 屬性 | 含巨集功能 | 必要屬性 | 說明 |
|---|---|---|---|
| 標籤 | 否 | 是 | 資料管道中的節點名稱。 |
| 使用連線 | 否 | 否 | 使用可重複使用的連線。如果使用連線,則不需要提供憑證。詳情請參閱「管理連線」。 |
| 參照名稱 | 否 | 是 | 如果「使用連線」未開啟,系統會顯示這個欄位。 用於沿襲的連線名稱。 |
| 名稱 | 否 | 是 | 如果開啟「使用連線」,系統就會顯示這個欄位。可重複使用的連線名稱。 |
| SAP 用戶端 | 是 | 是 | SAP 系統中的執行個體或環境。 |
| 拍攝快照 | 是 | 是 | 啟用 SAP 中的資料快照。 開啟快照的時機:
何時關閉快照:您要平行執行多個大量資料擷取作業。快照會使用 SAP 中的緩衝區資料表,這可能會導致 SAP 發生 out of memory 問題。不過,資料擷取完成後,緩衝區資料表就會清除。 |
| SAP 語言 | 是 | 是 | SAP 使用者介面和資料的顯示與處理語言。 |
| 連線類型 | 否 | 是 | SAP 連線類型:直接或負載平衡。 |
| SAP 應用程式伺服器主機 | 是 | 否 | 只有直接連線類型會使用這個主機名稱,這個主機名稱來自 SAP 應用程式伺服器,該伺服器是 SAP 用戶端 (例如 SAP 網頁介面、網頁瀏覽器或行動應用程式) 和基礎資料庫之間的仲介層。 |
| SAP 系統編號 | 是 | 否 | 僅限直接連線類型,這個號碼是指派給每個 SAP 系統的專屬 ID。例如:00。 |
| SAP 路由器 | 是 | 否 | 僅適用於「直接」連線類型,這是 Proxy 伺服器的路由器字串,可為 SAP 系統與外部用戶端或合作夥伴之間的通訊提供安全管道。 |
| SAP Message Server 主機 | 是 | 否 | 僅適用於「負載平衡」連線類型,這是主機的名稱,可協助在 SAP 中跨多個應用程式伺服器進行負載平衡。 |
| SAP 訊息伺服器服務或通訊埠號碼 | 是 | 否 | 僅適用於「負載平衡」連線類型,這是 SAP 訊息伺服器監聽 SAP 用戶端和應用程式伺服器連入連線的網路通訊埠。 |
| SAP 系統 ID (SID) | 是 | 否 | 僅限「Load balanced」(負載平衡) 連線類型,這個 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 位元組整數 | long |
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)、TimeStamp | 時間戳記 |
用途
系統支援兩種擷取內容:
- SAP 資料庫資料表和檢視區塊
- SAP ABAP CDS
在每個環境中,SAP Table 外掛程式都支援標準和自訂資料庫資料表和檢視區塊。
限制
SAP 表格外掛程式有下列限制:
- 不支援聯結資料表。
- 不支援含參數的 CDS 檢視區塊。
- 不支援沒有鍵欄位的資料。
- 如果啟用快照功能,使用超過 30,000 的套件大小可能會導致管道失敗。這個封裝大小可能會因 SAP 表格中的欄數而異。您可以使用下列公式,計算資料表的最佳封包大小:列大小 (以字元數為單位) * 5。
- 連線管理員最多可瀏覽 1,000 個 SAP 資料表名稱。
- 發生管道錯誤 (例如接收器發生錯誤) 時,SAP Table 外掛程式會呼叫專為清理作業設計的自訂 RFM:
/GOOG/RFC_READ_TABLE_CLEANUP,嘗試清理與擷取作業相關的所有有效 SAP 側邊程序。
後續步驟
- 進一步瞭解 SAP on Google Cloud。