SAP 適用的 BigQuery Toolkit 總覽

BigQuery Toolkit for SAP 可讓您使用 ABAP,以程式輔助方式存取 SAP 環境中的 BigQuery 資源。您不必為常見作業編寫樣板程式碼,即可從 SAP 存取 BigQuery 資源,例如:

  • 資料表定義同步處理:讓 SAP 和 BigQuery 資料表保持同步。
  • 資料類型對應:對應 SAP 和 BigQuery 之間的資料類型。
  • 資料分塊:有效率地移轉大型資料集。
  • 錯誤處理:管理資料複製期間可能發生的錯誤。

與需要 SAP Landscape Transformation Replication ServerBigQuery Connector for SAP 不同,您可以在任何支援 ABAP 的 SAP ERP 系統中使用 BigQuery Toolkit for SAP。

適用於 SAP 的 BigQuery Toolkit 會以 ABAP SDK for Google Cloud 的子封裝形式出貨,無論是地端或任何雲端版本皆適用。如要使用工具包,您必須在 SAP 環境中安裝 SDK。如需安裝步驟的相關資訊,請參閱「安裝及設定適用於 Google Cloud 的 ABAP SDK 內部部署或任何雲端版本」。

BigQuery Toolkit for SAP 僅適用於 ABAP SDK for Google Cloud 的地端或任何雲端版本。

將資料從 SAP 複製到 BigQuery

您可以使用 BigQuery Toolkit for SAP 的 BigQuery 資料移轉模組,將 SAP 資料複製到 BigQuery,以進行分析和產生報表。

下圖顯示 BigQuery 資料移轉模組中的資料移轉設定和資料複製流程:

BigQuery 資料移轉模組中的資料移轉設定和複製流程

資料移轉設定

如上一節的圖表所示,如要從 SAP 建立資料複製到 BigQuery,管理員需要進行下列設定:

  1. 在 Google Cloud中,雲端管理員會設定 BigQuery 並授予必要的 IAM 權限。
  2. 在 SAP 系統中,SAP 系統管理員會設定 ABAP SDK for Google Cloud,允許與「 Google Cloud」通訊。
  3. 在 SAP 系統中,SAP 系統管理員會設定 BigQuery 資料移轉模組,管理資料移轉設定和 BigQuery 資源詳細資料。這些設定會儲存在下列資料表中:
    • /GOOG/BQTR_MASTER
    • /GOOG/BQTR_TABLE
    • /GOOG/BQTR_FIELD
    • /GOOG/BQTR_PARAMS

ABAP 程式碼執行時,BigQuery 資料載入類別會讀取這些資料表的設定,引導資料複製程序。

資料複製流程

如上一節的圖表所示,如要將資料從 SAP 系統複製到 BigQuery,ABAP 開發人員會編寫自訂 ABAP 程式碼,執行下列操作:

  1. 從標準或自訂 SAP 資料表讀取資料。
  2. 使用 BigQuery 資料載入類別 /GOOG/CL_BQTR_DATA_LOAD,將所選資料複製到 BigQuery。本課程:

    • 使用儲存在 BigQuery 資料移轉設定資料表中的設定。
    • 使用 /GOOG/CL_BIGQUERY_V2 類別執行資料表定義同步處理和資料複製作業。
  3. 實作後續商業邏輯。

  4. 處理錯誤和例外狀況。

支援的資料複製來源

您可以使用 BigQuery Toolkit for SAP 的 BigQuery 資料移轉模組,以程式輔助方式從 ABAP 字典物件 (例如資料表、字典檢視區塊、CDS 檢視區塊、CDS 實體),或從任何具有平面結構類型的資料物件,將資料載入 BigQuery。

您可以使用 BigQuery Toolkit for SAP,透過下列方式複製資料:

  • 做為 SAP 強化架構 (例如 Business Add-Ins (BAdIs)、使用者結束和常式) 內的外掛程式,舉例來說,工具包可以插入 Business Warehouse (BW) 常式,傳送 BW 資料移轉程序 (DTP) 處理的資料。
  • 從自訂 ABAP 程式批次載入資料。

成效規劃

BigQuery Toolkit for SAP 會對 BigQuery API 進行同步呼叫,將資料傳輸至 BigQuery,完成最後階段的作業。

在自訂 ABAP 應用程式中使用 BigQuery Toolkit for SAP 時,您可以透過 SAP 工作負載和 BigQuery 資料移轉設定,最佳化資料複製作業的效能。

SAP 工作負載和自訂應用程式的效能調整選項

如要提升 SAP 工作負載和自訂應用程式的效能,請考慮下列選項:

  • 在 Google Cloud上執行 SAP 工作負載,也就是將資料複製到 BigQuery 的來源系統。
  • 如果 SAP 工作負載位於 Google Cloud,請在與 SAP 工作負載相同的地區中建立 BigQuery 資料集。
  • 如果無法在 Google Cloud上執行 SAP 工作負載,請按照下列步驟操作:
    • 在最靠近 SAP 工作負載的 Google Cloud 區域中,建立 BigQuery 資料集。
    • 使用 Cloud Interconnect 連線至 Google Cloud 。
  • 根據工作負載妥善調整 SAP 伺服器系統大小。
  • 實作平行處理,在多個平行執行緒中呼叫 BigQuery 資料移轉模組,以提高輸送量。

由於 BigQuery Toolkit for SAP 會將資料傳輸至 BigQuery,因此其效能會受到特定環境中的各種因素影響。這些因素包括:

  • 網路基礎架構:頻寬限制、延遲時間和整體網路穩定性,都會對複製速度和效率造成重大影響。

  • 來源系統:來源資料庫的效能 (包括硬體、設定和目前負載) 可能會影響複製效能。

  • 資料量和變更率:複製的資料量和變更頻率會影響複製作業所需的時間和資源。

  • 其他元件:防火牆、安全性政策、負載平衡器和其他基礎架構元素,都會影響資料複製的整體效能。

您有責任在自己的環境中,對 BigQuery Toolkit for SAP 進行效能測試。為獲得最佳結果,請考慮並調整環境中的所有相關元件。

透過 BigQuery 資料移轉設定提供的效能調整選項

BigQuery 資料移轉設定提供下列選項,可控管複製效能:

資料移轉區塊大小

SAP 專用的 BigQuery Toolkit 會將資料以記錄區塊的形式傳送至 BigQuery。建議您搭配使用 BigQuery Toolkit for SAP 的預設區塊大小 (10,000 筆記錄)。如果來源資料表中的記錄包含的欄位很少,或欄位包含的資料值很小,則可以使用較大的區塊大小,最多可達 BigQuery Toolkit for SAP 允許的最大區塊大小 (50,000 筆記錄)。

如果特定區塊中的記錄數量解析為的位元組大小超過 BigQuery 對 HTTP 要求位元組大小的限制,您可能會收到 quotaExceeded 錯誤或 invalid 錯誤。如果來源資料表中的記錄包含大量欄位,或欄位包含大量資料,就可能發生這種情況。

如果收到與區塊大小相關的錯誤訊息,請嘗試縮減該資料表大量轉移設定中指定的區塊大小。或者,您也可以為該資料表啟用動態區塊大小,自動調整區塊大小。詳情請參閱「動態區塊大小」。

如果尚未啟用動態區塊大小,對於 SAP 來源資料表 (例如 MSEGACDOCAMATDOC) 而言,由於這些資料表可能含有大量記錄,且每筆記錄都有許多欄位,因此您可能需要將區塊大小指定為 2,000 以下。

您可以執行 /GOOG/BQTR_SETTINGS 交易來指定區塊大小。區塊大小是在「資料表屬性」畫面上的「區塊大小」欄位中指定。

記錄壓縮

根據預設,BigQuery Toolkit for SAP 會壓縮傳送至 BigQuery 的記錄,藉此提升複製效能。如果是在資料表層級啟用記錄壓縮功能 (預設設定),BigQuery Toolkit for SAP 會從傳送至 BigQuery 的記錄中,省略來源記錄中所有空白的欄位。將記錄插入 BigQuery 時,系統會以 null 初始化目標 BigQuery 資料表中的欄位,這些欄位是從傳送的資料中省略。

不過,如果您需要在資料表層級使用記錄壓縮功能,同時將部分空白欄位及其初始值複製到 BigQuery,則可以變更這些特定欄位的記錄壓縮設定。因此,系統不會從傳送的資料中省略指定欄位的空白值,而是保留來源表格中初始化的值。

大量轉移設定中,您可以使用資料表和欄位層級的「傳送未壓縮的標記」設定,控管記錄壓縮行為。下表根據「傳送未壓縮的標記」設定,摘要說明記錄壓縮行為:

在表格層級傳送未壓縮的旗標 在欄位層級傳送未壓縮的旗標 記錄壓縮行為
所有欄位都會以未壓縮的形式傳送。
所有欄位都會以未壓縮的形式傳送。
只有欄位層級選取的欄位會以未壓縮格式傳送。
所有欄位都會以壓縮格式傳送。

傳送未壓縮的資料副本時,除了日期和時間戳記欄位,空白欄位會保留在來源資料表中初始化的值。日期和時間戳記欄位的初始值如下:

  • 日期欄位初始化值: DATE 1970-01-01
  • 時間戳記欄位初始化值: TIMESTAMP 1970-01-01 00:00:00 UTC

以下螢幕截圖顯示記錄壓縮行為的範例:

圖表說明請見上文

上圖顯示:

  • 第 1 列:所有欄位都未壓縮。在資料表層級選取「傳送未壓縮的旗標」
  • 第 2 列:所有欄位都經過壓縮。資料表層級的「傳送未壓縮的標記」已清除。
  • 第 3 列:下列欄位未壓縮:int2_valuecurr_value_154currencyfloat_valuelang_value。對於這些欄位,系統會在欄位層級選取「傳送未壓縮的標記」

為提升效能,建議您不要在表格層級選取「傳送未壓縮的標記」,以免停用記錄壓縮功能。這可能會對複製效能造成負面影響。如果只需要為特定欄位傳送未壓縮的資料,請在欄位層級為這些特定欄位選取「傳送未壓縮的旗標」

目標資料表屬性

在 BigQuery Toolkit for SAP 的 BigQuery 資料移轉模組中設定複製作業時,您可以指定 BigQuery Toolkit for SAP 在 BigQuery 中建立目標資料表時套用的設定。

舉例來說,您可以為目標 BigQuery 表格指定下列屬性:

  • 資料表名稱
  • 欄位的預設命名選項
  • 額外欄位,用於擷取記錄變更及啟用記錄計數查詢
  • 資料表分區

欄位的預設命名選項

您可以設定 BigQuery Toolkit for SAP,從來源欄位的名稱,或來源欄位的標籤和說明,為目標 BigQuery 資料表中的欄位建立名稱。標籤和說明通常會提供更多欄位內容的相關資訊。

根據預設,SAP 適用的 BigQuery Toolkit 會使用來源欄位的名稱。如要變更預設值,請在 /GOOG/BQTR_SETTINGS 交易的大量轉移設定中指定資料表建立屬性時,指定「自訂名稱」旗標。這項規格會儲存在 /GOOG/BQTR_MASTR 設定表中。

建立名稱時,BigQuery Toolkit for SAP 會修改名稱,使其符合 BigQuery 命名慣例。

在 BigQuery Toolkit for SAP 於 BigQuery 中建立資料表之前,您可以在 /GOOG/BQTR_SETTINGS 交易的欄位對應畫面中編輯欄位名稱。

指定 Custom Names 標記後,BigQuery Toolkit for SAP 在建立目標資料表時使用的名稱,會顯示在欄位對應畫面中的「External Field Name」欄。

BigQuery Toolkit for SAP 會根據每個來源欄位的「medium」欄位標籤,在「External Field Name」欄位中建立名稱。如果來源欄位定義中未指定中等欄位標籤,則會使用該欄位的簡短說明。如果未指定簡短說明,系統會使用最短的指定標籤。如未指定任何項目,系統會使用來源欄位的名稱。

如要進一步瞭解如何自訂目標欄位名稱,請參閱「自訂目標欄位名稱」。

擷取記錄變更並啟用記錄計數

如要擷取觸發複製作業的來源資料表變更類型,並查詢 BigQuery 資料表中的記錄數,以便與來源資料表中的記錄數進行比較,請在設定複製作業時,於 /GOOG/BQTR_SETTINGS 交易中指定「Extra Fields Flag」(額外欄位標記) 選項。

指定「額外欄位標記」選項後,系統會在目標 BigQuery 資料表的結構定義中新增下列資料欄:

欄位名稱 資料類型 說明
operation_flag STRING

識別來源資料表中的變更類型,這些變更會觸發記錄載入或複製到 BigQuery。

如要計算以複製模式插入的記錄,請查詢 operation_flag 欄位中值為 IUD 的記錄。如需查詢範例,請參閱「查詢以複製模式插入的記錄數」。

如要計算以初始載入模式插入的記錄,請查詢 operation_flag 欄位值為 L 的記錄。如需查詢範例,請參閱「查詢以初始載入模式插入的記錄數」。

is_deleted BOOLEAN 如果為 true,表示來源記錄已從來源資料表刪除。

如要只計算 BigQuery 資料表中未從來源資料表刪除的記錄,請使用 is_deleted 欄位排除已刪除的來源記錄。如需查詢範例,請參閱「查詢 BigQuery 資料表中的記錄總數」。

recordstamp TIMESTAMP

BigQuery Toolkit for SAP 將記錄傳送至 BigQuery 的時間。

如要計算 BigQuery 資料表中的不重複記錄數量,請只查詢每筆記錄最近一次插入的執行個體。如需查詢範例,請參閱「查詢 BigQuery 資料表中的記錄總數」。

「額外欄位旗標」選項的目前設定會儲存在 /GOOG/BQTR_MASTR 設定表格中。

如要進一步瞭解如何指定「額外欄位標記」,請參閱「指定資料表建立和其他一般屬性」。

資料表分區

您可以透過下列方式建立 BigQuery 資料表:

  • 依來源資料表中的時間戳記欄位分區的資料表,這會建立時間單位資料欄分區資料表。
  • 根據記錄插入 BigQuery 的時間分區,建立擷取時間分區資料表。

設定複寫屬性時,請在 /GOOG/BQTR_TABLE 的「Partition Type」(分區類型) 欄位中指定分區類型,即可啟用分區功能。

您可以指定的分區類型會依小時、天、月或年調整分區的精細程度。

如要使用來源資料表的時間戳記進行時間單位資料欄分區,請在「分區欄位」欄位中指定來源欄位的名稱。

如要使用 BigQuery 插入時間進行擷取時間分區,請將「Partition Field」(分區欄位) 留白。SAP 專用的 BigQuery Toolkit 會在目標資料表中建立欄位,用於儲存插入時間。

目標欄位屬性

根據預設,SAP 適用的 BigQuery Toolkit 會使用 SAP 來源資料表中的欄位名稱和資料類型,做為目標 BigQuery 中的欄位名稱和資料類型。

您也可以在建立目標資料表前,自訂欄位名稱或變更 BigQuery 資料型別。

自訂目標欄位名稱

建立表格前,您可以自訂目標欄位名稱。

如有需要,BigQuery Toolkit for SAP 會修改您指定的自訂名稱,以符合 BigQuery 命名慣例。

設定複製作業時,您可以在 /GOOG/BQTR_SETTINGS 交易的欄位對應畫面中查看欄位名稱。SAP 專用的 BigQuery Toolkit 會將設定儲存在/GOOG/BQTR_FIELD設定資料表中。

在 BigQuery 中建立資料表之前,您可以編輯欄位對應畫面「Temporary Field Name」(暫時欄位名稱) 欄中的產生名稱,指定自訂欄位名稱。如果刪除值並將「Temporary Field Name」欄位留空,BigQuery Toolkit for SAP 會使用來源欄位的名稱做為目標欄位的名稱。

編輯「暫時欄位名稱」欄位後,按一下「儲存」,BigQuery Toolkit for SAP 會驗證值、視需要套用 BigQuery 命名慣例,並儲存變更。如要驗證值,請按下鍵盤上的 Enter 鍵,不必儲存值。

如要進一步瞭解如何設定目標欄位的預設命名方式,請參閱「欄位的預設命名選項」。

使用試算表或文字檔編輯 BigQuery 欄位對應

(選用) 建立目標 BigQuery 資料表前,您可以將目標欄位的預設資料類型、名稱和說明儲存至試算表或文字檔。即使 BigQuery 資料工程師或管理員無法存取 SAP 伺服器,也能透過這種方式編輯值。

編輯值後,您需要將檔案及其內容轉換為逗號分隔值 (CSV) 格式。然後使用自訂交易 /GOOG/BQTR_SETTINGS 上傳 CSV 檔案,即可套用大量轉移設定的更新。

如要使用 CSV 檔案編輯 BigQuery 欄位對應,請按照下列步驟操作:

  1. 使用預設欄位對應建立試算表或文字檔。
  2. 編輯試算表或文字檔中的值。
  3. 將試算表或文字檔轉換為 CSV 格式。
  4. 在「BigQuery 資料移轉:設定維護」畫面中,上傳 CSV 檔案。

如要進一步瞭解這個程序,請參閱「在 CSV 檔案中編輯 BigQuery 欄位對應」。

BigQuery 欄位的命名慣例

BigQuery 命名慣例只使用小寫英文字母、數字和底線。

BigQuery Toolkit for SAP 會將 BigQuery 命名慣例套用至任何輸入值,做為目標欄位的名稱。

舉例來說,如果您輸入 FIELD-@#!*123 做為自訂欄位名稱,BigQuery Toolkit for SAP 會將名稱變更為 field_123

如要進一步瞭解 BigQuery 欄位的命名慣例,請參閱「資料欄名稱」。

資料類型對應

根據預設,BigQuery Toolkit for SAP 會根據來源 SAP 欄位的 SAP 類型SAP 資料類型,為目標 BigQuery 欄位指派資料類型。

設定複製作業時,您可以在 /GOOG/BQTR_SETTINGS 交易的欄位對應畫面中查看資料類型。SAP 專用的 BigQuery Toolkit 會將設定儲存在/GOOG/BQTR_FIELD設定資料表中。

在 BigQuery Toolkit for SAP 於 BigQuery 中建立資料表之前,您可以在欄位對應畫面中的「外部資料元素」欄,將預設資料類型規格變更為其他 BigQuery 資料類型。

需要特殊處理的資料類型

為確保準確度及與目標 BigQuery 資料表相容,在複製程序中,有幾種 SAP 資料類型需要特別處理或轉換。

BigQuery Toolkit for SAP 會自動處理部分轉換作業,但其他作業則需要您手動設定。

您必須手動處理下列資料類型的轉換:

布林值

如果是布林值,SAP 會使用 CHAR 資料類型。根據預設,BigQuery Toolkit for SAP 會將這個資料類型對應至目標 BigQuery 資料表中的 STRING 資料類型。

因此,使用 /GOOG/BQTR_SETTINGS 交易設定布林值的複製作業時,您必須在欄位對應畫面中,將布林值欄位的預設資料類型指派從 STRING 變更為 BOOLEAN

時間戳記

對於時間戳記,SAP 使用的資料類型為 P (封裝十進位) 或 DEC (十進位)。根據預設,BigQuery Toolkit for SAP 會將這些資料類型對應至目標 BigQuery 資料表中的 NUMERIC

因此,如要使用 /GOOG/BQTR_SETTINGS 交易設定複製作業,您必須在欄位對應畫面中,將時間戳記欄位的預設資料類型指派作業從 NUMERIC 變更為 TIMESTAMPTIMESTAMP (LONG)

X SAP 類型

X SAP 類型為十六進位,並以 RAWRAWSTRINGLRAW SAP 資料型別表示。根據預設,BigQuery Toolkit for SAP 會將這些資料類型對應至來源 BigQuery 資料表中的 STRING

如果需要將 X SAP 類型來源欄位對應至 BYTES,請在 /GOOG/BQTR_SETTINGS 交易的欄位對應畫面中,變更欄位的預設資料類型指派。

SAP 有時也會使用 X SAP 類型,表示整數。在本例中,BigQuery Toolkit for SAP 會檢查整數的其中一個 SAP 資料類型 (INT1INT2INT4INT8) 的來源欄位資料類型,並在目標 BigQuery 表格中指派 INTEGER 資料類型。

y SAP 類型

y SAP 類型種類是位元組字串,並以 RAWRAWSTRINGLRAW SAP 資料類型表示。根據預設,BigQuery Toolkit for SAP 會將這些資料類型對應至來源 BigQuery 資料表中的 STRING

如果需要將 y SAP 類型來源欄位對應至 BYTES,請在 /GOOG/BQTR_SETTINGS 交易的欄位對應畫面中,變更欄位的預設資料類型指派。

預設資料類型對應

下表顯示 BigQuery Toolkit for SAP 的預設資料類型轉換:

SAP 類型 SAP 資料類型 BigQuery 資料類型 附註
b (1 位元組整數)
s (2 位元組整數)
I (4 位元組整數)
8 (8 位元組整數)
INT1
INT2
INT4
INT8
INTEGER
F (浮點數) FLTP FLOAT
P (已封裝) CURR
DEC
QUAN
NUMERIC 根據預設,SAP 類型種類 P 會對應至 BigQuery 資料類型 NUMERIC,並轉換為外部格式的數字。
a (十進位浮點數,16 位) DECFLOAT16
NUMERIC
e (十進位浮點數,16 位) DECFLOAT34
NUMERIC
N (數字) NUMC STRING
X (十六進位)
y (位元組字串)
RAW
RAWSTRING
LRAW
STRING 如果 SAP 類型為 X,但資料類型名稱涵蓋模式 'INT*' (INT1INT2INT4),來源資料元素會替換為具有 TYPEKIND '8' 的新資料元素 TYPINT8,並對應至 BigQuery 資料類型 INTEGER
C (字元)
g (字元字串)
? (csequence)
& (clike)
CHARSTRING STRING
D (日期) DATS DATE
T (時間) TIMS TIME

社群資源

如要在使用 Embedded BW 的 SAP S/4HANA 系統中,加速實作以 BigQuery Toolkit 為基礎的應用程式,可以使用 GitHub 上的開放原始碼生成工具

取得支援

Google Cloud 提供支援,協助解決與安裝、設定、操作及維護 BigQuery Toolkit for SAP 相關的問題。

如果問題源自 SAP 管理的元件,例如 Operational Data Provisioning (ODP)、Data Migration Server (DMIS)、Core Data Services (CDS)、Internet Communication Manager (ICM) 或第三方軟體, Google Cloud 客戶服務 Google Cloud 會盡力找出根本原因。如要解決這些問題,請與相關供應商或支援服務供應商聯絡。

如要排解 BigQuery Toolkit for SAP 的問題,請參閱「排解 BigQuery Toolkit for SAP 的問題」。

如需協助解決 ABAP SDK for Google Cloud 的問題,請按照下列步驟操作: