SAP 資料表批次來源

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

SAP 資料表批次來源外掛程式 (SAP Table 外掛程式) 可讓您讀取 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 以上版本

如要進一步瞭解 SAP on Google Cloud,請參閱「SAP on Google Cloud簡介」。

事前準備

設定 SAP 表格外掛程式使用的下列系統和服務:

  1. 設定 SAP ERP 系統。這項程序包含下列步驟:
    • 安裝 SAP 傳輸檔案。
    • 設定必要的 SAP 授權和角色。
    • 設定 SAP Java 連接器。
  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. 確認已選取「資料管道 - 批次」 (而非「即時」)。
  3. 在「Source」選單中,按一下「Sap Table」。SAP 資料表節點會顯示在管道中。
  4. 如要設定來源,請前往 SAP 資料表節點,然後按一下「Properties」
  5. 輸入下列屬性。如需完整清單,請參閱「屬性」。

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

      新連結

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

      1. 關閉「Use connection」
      2. 在「Connection」專區中,請在下列欄位中輸入 SAP 帳戶的相關資訊:

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

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

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

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

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

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

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

            SELECT * FROM Roster WHERE SchoolID > 52;
            

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

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

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

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

      可重複使用的連線

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

      1. 開啟「Use connection」
      2. 按一下「瀏覽連線」
      3. 按一下連線名稱。

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

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

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

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

      8. 選用:在「Additional SAP connection properties」欄位中,輸入必須覆寫 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 Message Server 服務或通訊埠號碼 僅限負載平衡連線類型,這是 SAP 訊息伺服器監聽 SAP 客戶端和 SAP 內應用程式伺服器傳入連線的網路通訊埠。
SAP 系統 ID (SID) 僅適用於負載平衡連線類型,這個 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)、時間戳記 時間戳記

用途

系統支援������擷取內容:

  • SAP 資料庫資料表和檢視畫面
  • SAP ABAP CDS

在每個情境中,SAP 資料表外掛程式都支援標準和自訂資料庫資料表和檢視畫面。

限制

SAP 資料表外掛程式有下列限制:

  • 不支援資料表彙整。
  • 不支援含有參數的 CDS 檢視畫面。
  • 不支援未設定主要欄位的資料。
  • 如果啟用快照功能,使用超過 30,000 的套件大小可能會導致管道失敗。這個套件大小可能會有所不同,具體取決於 SAP 資料表中的欄數。您可以使用以下公式計算資料表的最佳套件大小:列大小 (以字元數計) * 5。
  • 透過連線管理工具,最多可瀏覽 1,000 個 SAP 表格名稱。
  • 發生管道錯誤 (例如匯入端的錯誤) 時,SAP 資料表外掛程式會嘗試呼叫用於清理的自訂 RFM (/GOOG/RFC_READ_TABLE_CLEANUP),藉此清理與擷取作業相關的任何有效 SAP 端程序。

後續步驟