SAP 資料表批次來源

本頁面說明如何設定從 SAP 應用程式資料大量擷取資料。

您可以使用 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 外掛程式使用的下列系統和服務:

  1. 設定 SAP ERP 系統。 這個程序包含下列步驟:
    • 安裝 SAP 傳輸檔案。
    • 設定必要的 SAP 授權和角色。
    • 設定 SAP Java Connector。
  2. 在 Cloud Data Fusion 中部署外掛程式

    • 重要事項:請選擇與 Cloud Data Fusion 版本相容的外掛程式版本。
    • 如果升級 Cloud Data Fusion 執行個體或外掛程式的版本,請評估變更對管道功能範圍和效能的影響。
  3. 在 Cloud Data Fusion 和 SAP 之間建立 RFC 連線

    • 確認 Cloud Data Fusion 執行個體與 SAP 伺服器之間的通訊已啟用。
    • 如果是私人執行個體,請設定 虛擬私有雲網路對等互連
    • SAP 系統和 Cloud Data Fusion 執行個體必須位於同一個專案。

設定外掛程式

  1. 前往 Cloud Data Fusion 網頁介面,然後點選「Studio」
  2. 確認已選取「Data Pipeline - Batch」(資料管道 - 批次),而非「Realtime」(即時)
  3. 在「來源」選單中,按一下「SAP 資料表」。SAP 資料表節點會顯示在管道中。
  4. 如要設定來源,請前往 SAP Table 節點,然後按一下「Properties」(屬性)
  5. 輸入下列屬性。如需完整清單,請參閱「屬性」。

    1. 輸入 SAP Table 節點的「標籤」,例如 SAP tables
    2. 輸入連線詳細資料。您可以設定新的單次連線,或是現有的可重複使用連線。

      新連結

      如要新增與 SAP 的一次性連線,請按照下列步驟操作:

      1. 請關閉「使用連線」
      2. 在「連線」專區中,在下列欄位中輸入 SAP 帳戶的資訊:

        1. 在「Reference name」(參照名稱) 欄位中,輸入連線的名稱,以識別這個沿襲來源。
        2. 在「SAP client」欄位中,輸入 SAP 內特定執行個體或環境的用戶端名稱。SAP 管理員可以提供用戶端名稱。
        3. 在「SAP language」(SAP 語言) 欄位中,輸入 SAP 登入語言。 預設值為 EN (英文)。
        4. 選取下列其中一種連線類型

          • 直接 (透過 SAP 應用程式伺服器)。如果選擇這個預設類型,請在下列欄位中輸入資訊:「SAP 應用程式伺服器主機」、「SAP 系統編號」和「SAP 路由器」
          • 已平衡負載 (透過 SAP 訊息伺服器)。如果選擇這個類型,請在下列欄位中輸入資訊:SAP 訊息伺服器主機SAP 訊息伺服器服務或連接埠號碼SAP 系統 ID (SID)SAP 登入群組名稱
        5. 在「SAP table/view name」(SAP 資料表/檢視畫面名稱) 欄位中,輸入 SAP 系統中的資料表或檢視畫面名稱。

        6. 提供 SAP 憑證:向 SAP 管理員索取 SAP 登入使用者名稱密碼

        7. 在「JCo Library Cloud Storage path」(JCo 程式庫 Cloud Storage 路徑) 欄位中,輸入 Cloud Storage 中 SAP Java Connector (SAP JCo) 的路徑,其中包含您上傳的 SAP JCo 程式庫檔案。

        8. 如要根據 SAP 的中繼資料產生結構定義,將 SAP 資料類型對應至相應的 Cloud Data Fusion 資料類型,請按一下「取得結構定義」。詳情請參閱「資料類型對應」。

        9. 選用步驟:如要最佳化 SAP 的擷取負載,請在下列欄位中輸入資訊:

          1. 使用「篩選選項」,即可根據選取條件 (例如具有一組已定義值的資料欄) 擷取記錄。在 WHERE 子句中,以 OpenSQL 語法定義條件。舉例來說,這項查詢會從 Roster 資料表傳回所有資料列,其中 SchoolID 資料欄的值為 SchoolID > 52

            SELECT * FROM Roster WHERE SchoolID > 52;
            

            詳情請參閱「支援的篩選器」。

          2. 在「要擷取的資料列數」欄位中,您可以提供正整數的資料列數,限制擷取的資料。

          3. 在「分割數」欄位中,您可以建立分割區來平行擷取資料記錄,進而提升效能。分割數量可能會影響 SAP 工作程序,因此請謹慎選取。

          4. 在「封裝大小」欄位中,指定要在單一 SAP 網路呼叫中擷取的記錄數量。套件大小會影響效能和可用資源,因此請謹慎選取。

      可重複使用的連線

      如要重複使用現有連線,請按照下列步驟操作:

      1. 開啟「使用連線」
      2. 按一下「Browse connections」(瀏覽連線)
      3. 按一下連線名稱。

      如果沒有連線,請按照下列步驟建立可重複使用的連線:

      1. 依序點選「新增連線」>「SapTable」
      2. 在隨即開啟的「Create a SapTable connection」(建立 SapTable 連線) 頁面中,輸入連線名稱和說明。
      3. 在「SAP client」(SAP 用戶端) 欄位中,輸入 SAP 中特定執行個體或環境的用戶端名稱。SAP 管理員可以提供用戶端名稱。
      4. 在「SAP language」(SAP 語言) 欄位中,輸入 SAP 登入語言。 預設值為 EN (英文)。
      5. 選取下列其中一種連線類型

        • 直接 (透過 SAP 應用程式伺服器)。如果選擇這個預設類型,請在下列欄位中輸入資訊:SAP 應用程式伺服器主機SAP 系統編號SAP 路由器
        • 已平衡負載 (透過 SAP 訊息伺服器)。如果選擇這個類型,請在下列欄位中輸入資訊:SAP 訊息伺服器主機SAP 訊息伺服器服務或連接埠號碼SAP 系統 ID (SID),以及 SAP 登入群組名稱
      6. 提供 SAP 憑證:請 SAP 管理員提供 SAP 登入使用者名稱密碼值。

      7. 在「JCo Library Cloud Storage path」(JCo 程式庫 Cloud Storage 路徑) 欄位中,輸入 Cloud Storage 中的 SAP Java Connector (SAP JCo) 路徑,其中包含您上傳的 SAP JCo 程式庫檔案。

      8. 選用:在「Additional SAP connection properties」(其他 SAP 連線屬性) 欄位中,輸入必須覆寫 SAP JCo 預設值的鍵/值組合。

      9. 點選「建立」

屬性

屬性 含巨集功能 必要屬性 說明
標籤 資料管道中的節點名稱。
使用連線 使用可重複使用的連線。如果使用連線,則不需要提供憑證。詳情請參閱「管理連線」。
參照名稱 如果「使用連線」未開啟,系統會顯示這個欄位。 用於沿襲的連線名稱。
名稱 如果開啟「使用連線」,系統就會顯示這個欄位。可重複使用的連線名稱。
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 子句進行篩選。根據條件擷取記錄,例如: 資料欄中有一組或一個範圍的值。
詳情請參閱「支援的篩選器」。
要擷取的資料列數量 限制擷取的記錄數量。
  • 請輸入正整數。
  • 如果值為 0 或留空,Cloud Data Fusion 會從資料表擷取所有記錄。
  • 如果您輸入的正值大於所選記錄數 (根據其他篩選器值),Cloud Data Fusion 只會擷取所選記錄。
要產生的分割數量 建立分割區,以便平行擷取記錄。
執行階段引擎會在擷取記錄時,建立指定數量的分區 (和 SAP 連線)。
調高這個值時請務必小心,因為這會增加與 SAP 的並行連線數
建議:為每個管道和同時執行的管道總數規劃 SAP 連線。
如果值為 0 或留空,Cloud Data Fusion 會根據可用的執行器數量、要擷取的記錄和封裝大小,選擇適當的值。
套裝方案大小 單一 SAP 網路呼叫中要擷取的記錄數量。這是指 SAP 在每次網路擷取呼叫期間,於記憶體中緩衝處理的記錄數。
設定這項屬性時請特別注意。多個資料管道同時擷取資料時,記憶體用量可能會達到高峰,導致 Out of memory 錯誤而失敗。
  • 請輸入正整數。
  • 如果輸入 0 或留空,外掛程式會使用標準值 70000,或適當計算的值。
  • 如果資料管道因 Out of memory 錯誤而失敗,請縮減封包大小,或增加 SAP 工作程序可用的記憶體。

支援的篩選器

系統支援下列篩選條件。

包含比較運算子的篩選條件

使用比較運算子,根據值之間的比較結果執行更複雜的篩選作業。

語法
    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)

使用邏輯運算子結合多項條件的篩選器

您可以使用邏輯運算子 (例如 ANDOR),擷取符合多個條件的資料列。

語法
    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_DECDF16_RAW (數字) a 十進位浮點數 8 個位元組 IEEE 754r 雙精度值
DF34_DECDF34_RAW (數字) e 十進位浮點 16 位元組 IEEE 754r 雙精度值
FLTP (數字) f 二進位浮點數 雙精度值
CHARLCHR (字元) c 字元字串 字串
SSTRINGGEOM_EWKB (字元) 字串 字元字串 字串
STRING (字元) 字串 字元字串 CLOB 位元組
NUMCACCP (字元) n 數字文字 字串
RAWLRAW (位元組) 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 側邊程序。

後續步驟