Mainframe Connector API 指令

下表列出可搭配 Mainframe Connector 使用的 BigQuery、Cloud Storage 和其他Google Cloud 指令。

產品 指令 說明 支援遠端轉碼
BigQuery 指令 使用這個指令建立二進位檔案。這項指令接受 COPYBOOK DD 做為輸入。

注意:建議您使用 qsam decodeqsam encode 指令執行這項工作。如要瞭解使用 qsam 指令的優點,請參閱「qsam 指令的優點」。

bq export 指令支援部分效能調整功能。詳情請參閱「bq export 指令的效能提升」。您可以使用 bq export 指令搭配自訂字元集。詳情請參閱「使用自訂字元集」。

注意:bq export 指令無法匯出大型 Bigtable 資料表。如要避免發生錯誤,請在匯出大型表格時,將 -allowLargeResults 標記新增至 bq export 指令。
使用這項指令將資料載入資料表。
使用這項指令建立需要設定分割和叢集功能的 BigQuery 資源,例如內建資料表或外部資料表。

您也可以使用 bq mk 指令,直接從剖析 COBOL 副本產生 BigQuery 資料表。詳情請參閱「從副本建立 BigQuery 資料表」。
使用這項指令建立查詢工作,執行指定的 SQL 查詢。這項指令會從 --sql 旗標或 QUERY DD 讀取 SQL 查詢。如果兩者都提供,系統會優先採用 --sql 旗標中的查詢。

使用 --follow=true 旗標產生報表,顯示所選查詢的結果。如要將這份報表寫入大型主機中的檔案,請定義指向稽核記錄報表檔案的 DD 陳述式 AUDITL。如要使用一般記錄行為,請勿使用 --follow 旗標。

部分查詢結果可能會傳回大量資料列,有時甚至多達數百萬筆。 為了確保輸出內容容易閱讀,顯示的行數設有上限。如要控制顯示的列數,請使用 --report_row_limit 旗標。舉例來說,使用 --report_row_limit 10 可將結果限制為 10 行。根據預設,顯示的行數上限為 30 行。

如要使用 bq query 參數化,請參閱 bq 查詢參數化
使用這項指令可永久刪除 BigQuery 資源。這項指令會永久刪除資源,因此建議您謹慎使用。
Cloud Run 指令 使用這個指令從大型主機觸發 Cloud Run 工作。
使用這個指令查看特定 Cloud Run 工作執行的記錄。
使用這項指令取消 Cloud Run 工作。
Cloud Storage 指令 使用這項指令將文字或二進位資料複製到 Cloud Storage。 您可以使用簡單的二進位複製模式,將資料集從 IBM z/OS 複製到 Cloud Storage,且不會修改資料,這項作業是資料管道的一部分。您也可以選擇將字元編碼從延伸二進位編碼十進位互換碼 (EBCDIC) 轉換為 ASCII UTF-8,並新增換行符號。

注意:建議您使用 copy text 指令執行這項工作,因為這些指令的功能更完善。

您也可以使用這項指令,複製作業控制語言 (JCL) 中定義的應用程式原始碼。
gsutil 公用程式 使用這項指令轉碼資料集,並以最佳化列欄 (ORC) 檔案格式寫入 Cloud Storage。這項指令會從 INFILE DD 讀取資料,並從 COPYBOOK 檔案讀取記錄版面配置。

注意:建議您使用 qsam decodeqsam encode 指令執行這項工作。如要瞭解使用 qsam 指令的優點,請參閱「使用 qsam 指令的優點」。

如要讓指令從資料來源名稱 (DSN) 檔案讀取資料,請使用下列標記:
  • --inDsn:輸入資料集 DSN。如果提供這個標記,系統會覆寫 INFILE DD。
  • --cobDsn:副本 DSN。如果提供這個旗標,系統會覆寫 COPYBOOK DD。
接著,這項指令會開啟可設定數量的平行連線至 Cloud Storage API,並將 COBOL 資料集轉碼為直欄式和 GZIP 壓縮的 ORC 檔案格式。壓縮率約為 35%。

您可以視需要使用這項指令,與在大型主機 VM 上執行的 Mainframe Connector gRPC 服務互動。如要這麼做,請設定 SRVHOSTSRVPORT 環境變數,或使用指令列選項提供主機名稱和通訊埠號碼。使用 gRPC 服務時,Mainframe Connector 會先將輸入資料集複製到 Cloud Storage,然後發出遠端程序呼叫 (RPC),指示 gRPC 服務轉碼檔案。

您也可以使用 gsutil cp 指令執行下列工作:
使用這項指令刪除 bucket 或 bucket 中的物件。
gszutil 公用程式 gszutil 公用程式會使用 IBM JZOS Java SDK 執行,並提供接受 gsutil 和 BigQuery 指令列呼叫的 Shell 模擬器 (使用 JCL)。

注意:建議您使用 qsam decodeqsam encode 指令執行這項工作。如要瞭解使用 qsam 指令的優點,請參閱「使用 qsam 指令的優點」。

gszutil 公用程式會接受 COPYBOOK DD 形式的結構定義,並使用該結構定義將 COBOL 資料集直接轉碼為 ORC,然後上傳至 Cloud Storage,藉此擴充 gsutil 公用程式的功能。gszutil 公用程式也允許您使用 JCL 執行 BigQuery queryload

gszutil 公用程式可與 gRPC 伺服器搭配使用,有助於減少每秒百萬指令數 (MIPS) 的消耗量。建議您在實際工作環境中使用 gszutil 公用程式,將 Cloud Storage 中的二進位檔案轉換為 ORC 格式。
qsamvsam 指令 使用這個指令和 --output-format 引數,將 QSAM 檔案記錄轉碼為所需格式。原始 QSAM 檔案會根據您使用 --max-chunk-size 引數指定的值,分割成多個區塊。轉碼輸出內容會儲存在目標路徑中,並依字典順序排序。
使用這項指令將外部來源的資料轉換為 QSAM 檔案。 輸入內容是由您使用 --input-format 引數指定的值定義。
使用這項指令,透過 --output-format 引數,將虛擬儲存空間存取方法 (VSAM) 檔案記錄轉碼為所需格式。系統會根據您使用 --max-chunk-size 引數指定的值,將原始 VSAM 檔案分割成區塊。轉碼輸出內容會儲存在目標路徑中,並依字典順序排序。
Pub/Sub 指令 使用這個指令將訊息發布至 Pub/Sub 主題。
其他指令 使用這項指令,將二進位資料集從來源路徑複製到目的地路徑。
使用這項指令將檔案複製到您選擇的儲存位置 (例如 Cloud Storage),反之亦然。
使用這項指令向 Web 服務或 REST API 發出 HTTP 要求。
使用這項指令觸發執行 Dataflow 彈性範本。這項指令會從指定的彈性範本路徑執行工作。詳情請參閱 gcloud dataflow flex-template run
使用這個指令將必要的系統資料列印至標準輸出 (stdout)。這樣一來,Mainframe Connector 支援團隊就能收集診斷問題所需的資訊,不必與客戶進行大量互動。
根據您使用的標記,systemreport 指令會列印下列系統資料:
  • --supported_ciphers:支援的密碼
  • --available_security_providers:可用的安全性供應商

使用自訂字元集

Mainframe Connector 支援不同的字元集,可將位元組解碼為 BigQuery 字串,反之亦然。您可以使用 Mainframe Connector 設定自訂字元集。您可以建構 Unicode 字元對應 (UCM) 檔案,設定自訂字元集。Mainframe Connector 支援下列 UCM 格式子集:

<code_set_name>               "<name>"
<uconv_class>                 "SBCS"
<subchar>                     \x1A #Example

CHARMAP
#_______ _________
<U0000> \x00 |0       #For the third column, only 0 is supported.
<U0001> \x01 |0
#etc
END CHARMAP

如要使用自訂字元集,請以 UCM 格式定義設定檔。您可以設定 --encoding=charset 旗標,透過 gsutil cpbq export 指令使用這個自訂字元集。

建立自訂字元集時,請確認下列事項:

  • 定義 UCM 檔案時,請注意下列事項:
    • Mainframe Connector 僅支援使用單一位元組字元集 (SBCS) 自訂的字元集。
    • Mainframe Connector 僅支援 UCM 精確度指標 |0
    • 確認 UCM 檔案位於 z/OS Unix 系統服務 (USS),而非多個虛擬儲存空間分割資料集 (MVS PDS)。
    • 確認 UCM 檔案是以美國國家標準資訊交換碼 (ASCII) 格式儲存,而非以擴充二進位編碼十進位交換碼 (EBCDIC) 格式儲存。
  • 為每個可能的單一位元組值明確對應至 Unicode 字元。如果不確定要將位元對應至哪個 Unicode 字元,建議您對應至 U+FFFD。您可以將不同的位元組序列對應至相同的 Unicode 字元。不過,在這些情況下,對應並非雙向,也就是說,當您將資料載入 BigQuery,然後匯出回二進位檔案時,輸出內容可能與原始輸入內容不同。
  • 確認第二欄中的位元組序列不重複。如果多個位元組序列對應至同一個 Unicode 字元,這個 Unicode 字元會解碼為 UCM 檔案中最後定義的對應位元組序列。
  • 將環境變數 BQSH_FEATURE_CUSTOM_CHARSET 設為 UCM 檔案的路徑,確認 Mainframe Connector 可以找到 UCM 檔案。如要使用多個字元集,請提供多個字元集的路徑,並以半形分號分隔。例如 BQSH_FEATURE_CUSTOM_CHARSET=path1;path2path 可以指向本機檔案,也可以指向儲存在 Cloud Storage 中的檔案。如果您執行 gsutil cpbq export 指令時使用 --remote 旗標來執行遠端轉碼,Mainframe Connector 會使用為 BQSH_FEATURE_CUSTOM_CHARSET 環境變數設定的本機值。在獨立模式下執行 Mainframe Connector 時,也適用相同規定。如果 --encoding 旗標參照的自訂字元集與您為 BQSH_FEATURE_CUSTOM_CHARSET 設定的值不符 (或您完全未設定 BQSH_FEATURE_CUSTOM_CHARSET),指令會結束並顯示錯誤訊息。

bq export 指令的效能調整設定

Mainframe Connector 支援 bq export 指令的下列效能調整設定:

  • exporter_thread_count:(選用) 設定工作執行緒數量。預設值為 4。
  • max_read_streams:(選用) 設定讀取串流上限。預設值與為 exporter_thread_count 設定的值相同。
  • order_response:(選用) 如果將這個旗標設為 true,匯出工具會保留查詢結果順序。這個旗標會影響匯出效能。預設值為 false。
  • max_read_queue:(選用) 設定讀取記錄佇列的數量上限。預設值為執行緒數量的兩倍。
  • transcoding_buffer:(選用) 以 MB 為單位,設定每個執行緒的轉碼緩衝區大小。預設值為 20 MB。

請注意,您也可以嘗試設定 OVERRIDE_GRPC_WINDOW_MB 環境變數來增加傳輸視窗大小,以提升效能。預設視窗大小為 4 MB。

從副本建立 BigQuery 資料表

您可以使用 bq mk 指令,直接從剖析 COBOL 副本產生 BigQuery 表格。原生副本書剖析器會從副本書的 VALUE 子句中擷取預設值,並將這些值指派給新建立的 BigQuery 表格中對應的資料欄。

為協助您測試這項功能,bq mk 指令也提供試執行模式。這個模式可讓您預覽產生的 CREATE TABLE SQL 指令,但不會在 BigQuery 中實際建立資料表。

bq mk 指令提供下列設定選項,支援這項功能:

  • --schema_from_copybook:指定用來建立資料表的副本。
  • --dry_run:(選用) 啟用後,指令只會列印產生的 CREATE TABLE SQL 指令,不會執行。這項標記預設為 false。
  • --tablespec "[PROJECT_ID]:[DATASET].[TABLE]":指定目標資料表的 BigQuery 專案 ID、資料集和資料表名稱。
  • --encoding:指定用於讀取副本檔案的編碼。預設值為 CP037

系統支援下列 VALUE 子句:

VAR1   PIC 9(5) VALUE 55.
*-- Set VAR1 to 55
VAR1   PIC X(5) VALUE aaaa. Set VAR1 to aaaa
VAR1   PIC 9(3) COMP VALUE 3. Set VAR1 to 3 (binary)
VAR1   PIC [9(5), X(5)] VALUE <literal>. Set VAR1 to <literal>
VAR1   PIC [9(5), X(5)] VALUE ZERO. Set VAR1 to 0 or "0"
VAR1   PIC [9(5), X(5)] VALUE ZEROS. Set VAR1 to 0 or "00000"
VAR1   PIC [9(5), X(5)] VALUE ZEROES. Set VAR1 to 0 or "00000"
VAR1   PIC X(5) VALUE SPACE. Set VAR1 to  " "
VAR1   PIC X(5) VALUE SPACES. Set VAR1 to  "     "

HIGH-VALUELOW-VALUE 子句僅支援英數變數。

VAR1   PIC X(5) VALUE HIGH-VALUE. Set VAR1 to `X"FF "
VAR1   PIC X(5) VALUE HIGH-VALUES. Set VAR1 to 0 or `X"FFFFFFFFFF"
VAR1   PIC X(5) VALUE LOW-VALUE. Set VAR1 to `X"00" (NULL)
VAR1   PIC X(5) VALUE LOW-VALUES. Set VAR1 to `X"0000000000" (NULL)
VAR1   PIC X(5) VALUE QUOTE. Set VAR1 to `"`
VAR1   PIC X(5) VALUE `QUOTES`. Set VAR1 to 0 or `""""`
VAR1   PIC [9(5), X(5)] VALUE NULL. Not defined and won't be supported
VAR1   PIC [9(5), X(5)] VALUE ALL <literal>. Set all fields with the value ALL to <literal>

bq query 參數化

您可以使用 Mainframe Connector,透過 bq query 執行參數化查詢。

以下範例說明如何使用參數化 bq query 查詢:

查詢檔案

SELECT * FROM `bigquery-public-data.samples.wikipedia` WHERE title = @xtitle

以下是含有多個參數的範例。

查詢檔案

SELECT * FROM bigquery-public-data.samples.wikipedia WHERE title = @mytitle AND num_characters > @min_chars;

執行範例

bq query \
--project_id=mainframe-connector-dev \
--location="US" \
--parameters=mytitle::Hippocrates,min_chars:INT64:42600

執行 gsutil cp 指令的模擬測試

gsutil cp 指令會使用 COBOL 副本解碼 QSAM 檔案,並在 Cloud Storage 上產生 ORC 檔案。您可以使用 dry_run 標記執行 gsutil cp 指令的模擬測試,並測試下列步驟:

  • 剖析 COBOL 副本或資料檔案,並檢查是否與 Mainframe Connector 相容。
  • 解碼 QSAM 檔案,但不寫入 Cloud Storage。

使用下列指令執行模擬測試:

gsutil cp \
--dry_run \
gs://result-dir

如果所有步驟都順利執行,指令會以回傳碼 0 結束。如果遇到任何問題,系統會顯示錯誤訊息。

使用 dry_run 旗標時,系統會記錄所有統計資料,例如讀取的總位元組數、寫入的記錄數和錯誤總數。

如果您使用 dry_run 標記,但資料來源不存在,指令不會傳回錯誤。而是只會檢查副本剖析器,然後完成執行。

將檔案從 Cloud Storage 複製到大型主機

您可以使用 gsutil cp 指令,將檔案從 Cloud Storage 複製到大型主機資料集。請注意,您無法複製分割資料集 (PDS)。

如要將檔案從 Cloud Storage 複製到大型主機資料集,請在 JCL 中指定要下載到大型主機的檔案 DSN 和空間需求,如下列範例所示:

//OUTFILE  DD DSN=MAINFRAME.DSN.FILE,DISP=(,CATLG),
//            RECFM=FB,DSORG=PS,
//            SPACE=(10,(2,1),RLSE),
//            AVGREC=M,
//            UNIT=SYSDA
//SYSPRINT DD SYSOUT=*
//SYSDUMP  DD SYSOUT=*
//STDIN DD *

以以下格式指定 gsutil cp 指令。如果檔案已存在於大型主機上,請確認您已將 --replace 標記新增至指令。

gsutil cp GCS_URI DSN --recfm=RECFM --lrecl=LRECL --blksize=BLKSIZE --noseek

更改下列內容:

  • GCS_URI:Cloud Storage 檔案的 Cloud Storage 統一資源識別碼 (URI)。例如:gs://bucket/sample.mainframe.dsn
  • DSN:DSN 在大型主機上的目的地位置。
  • RECFM:大型主機檔案的記錄格式 (RECFM)。有效值為 F、FB 和 U。請注意,這些值不區分大小寫。
  • LRECL:(選用) 檔案的記錄長度 (LRECL)。這個值必須是整數,且 >= 0。如未指定 LRECL,系統會假設檔案採用未定義長度的記錄格式 (U)。
  • BLKSIZE:(選用) 檔案的區塊大小。如果設為 0,系統會決定最佳的區塊大小。值必須是整數,且 >= 0。 如果未指定值,系統會將檔案視為未封鎖的檔案。
  • noseek:(選用) 如要提升下載效能,請加入此參數。這項標記預設為 false,也就是啟用搜尋作業。

執行範例

gsutil cp gs://sample-bucket/MAINFRAME.DSN.FILE MAINFRAME.DSN.FILE \
--lrecl=16 --blksize=0 --recfm=fb

gsutil cp 指令的效能調整設定

Mainframe Connector 支援 gsutil cp 指令的下列效能調整設定。

  • 使用 --parallelism 標記設定執行緒數量。預設值為 1 (單一執行緒)。
  • 使用 --maxChunkSize 引數設定每個區塊的大小上限。每個區塊都會有自己的 ORC 檔案。提高這個值可減少建立的區塊數量,但轉碼程序期間的記憶體需求會增加。詳情請參閱「剖析 maxChunkSize 引數」。預設值為 128 MiB。
  • 使用 --preload_chunk_count 引數設定所有工作站忙碌時要預先載入記憶體的資料量。這個引數可以提高效能,但會耗用記憶體。預設值為 2。

執行範例

gsutil cp \
  --replace \
  --parser_type=copybook \
  --parallelism=8 \
  --maxChunkSize=256MiB \
  gs://$BUCKET/test.orc

在本範例中,我們考量的是大型檔案,因此使用 8 個執行緒,達到該線路速率。如果記憶體充足,建議您將區塊大小增加至 256 MiB,甚至 512 MiB,因為這樣可減少建立額外負荷,並完成 Cloud Storage 物件。如果檔案較小,使用較少的執行緒和較小的區塊可能會產生較好的結果。

剖析 maxChunkSize 引數

maxChunkSize 標記接受的值格式為數量和測量單位,例如 5 MiB。金額和量級之間可以使用空白字元。

你可以使用下列格式提供值:

  • Java 格式:b/k/m/g/t,分別代表位元組、KiB、MiB、GiB 和 TiB
  • 國際格式:KiB/MiB/GiB/TiB,分別代表 kibibyte、mebibyte、gibibyte 和 tebibyte
  • 公制格式:b/kb/mb/gb/tb,分別代表 KB、MB、GB 和 TB

資料大小剖析不區分大小寫。請注意,你無法指定部分金額。例如,使用 716 KiB,而不是 0.7 MiB。