Mainframe Connector API 指令

下表列出 BigQuery、Cloud Storage 和其他可搭配主機架構連接器使用的Google Cloud 指令。

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

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

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

注意:bq export 指令無法匯出大型 Bigtable 表格。如要避免發生錯誤,請在匯出大型資料表時,在 bq export 指令中新增 -allowLargeResults 標記。
使用這個指令將資料載入資料表。
使用這項指令建立 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 執行的大型主機連接器 gRPC 服務互動。如要這樣做,請設定 SRVHOSTSRVPORT 環境變數,或使用指令列選項提供主機名稱和通訊埠號碼。使用 gRPC 服務時,大型主機連接器會先將輸入資料集複製到 Cloud Storage,然後發出遠端程序 (RPC) 呼叫,指示 gRPC 服務轉碼檔案。

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

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

gszutil 公用程式可接受 COPYBOOK DD 格式的結構定義,藉此擴充 gsutil 公用程式的功能,並在上傳至 Cloud Storage 前,直接將 COBOL 資料集轉碼為 ORC。gszutil 公用程式還可讓您使用 JCL 執行 BigQuery queryload

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

使用自訂字元集

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

bq export 指令的效能調整設定

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

  • exporter_thread_count:(選用) 設定 worker 執行緒的數量。預設值為 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 指令。如果 Mainframe 上已存在該檔案,請確認您已將 --replace 標記新增至指令。

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

更改下列內容:

  • GCS_URI:Cloud Storage 檔案的 Cloud Storage 統一資源 ID (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,分別代表位元組、kibibyte、mebibyte、gibibyte 和 tebibyte
  • 國際格式:KiB/MiB/GiB/TiB,分別代表 kibibyte、mebibyte、gibibyte 和 tebibyte
  • 指標格式:b/kb/mb/gb/tb,分別代表千位元組、百萬位元組、千兆位元組和兆位元組

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