本頁說明如何在本機大型主機上,將大型主機資料轉碼為支援的格式,然後將內容移至 BigQuery。轉碼是將資訊從一種編碼表示形式轉換為另一種形式的程序。本頁說明如何使用 Mainframe Connector 將大型主機資料轉碼為最佳化列直欄 (ORC),然後將資料儲存至 Cloud Storage。
Mainframe Connector 提供兩種方式,讓您在大型主機上以本機方式轉碼大型主機資料。
- 使用
qsam
指令 (5.16.0 以上版本) - 使用
gsutil cp
指令
qsam
指令的優點
qsam
指令具備下列優點:
- 支援複合資料類型,包括 OCCURS 子句 (清單)、REDEFINES 子句和巢狀記錄。如要進一步瞭解這些資料類型,請參閱
qsam
轉碼參考資料。 - 支援透過轉碼器設定檔設定轉碼程序。這項功能可讓您在將資料解碼為 Google Cloud,以及將資料編碼回大型主機時,享有更大的彈性。
- 支援建立溢位資料集,也就是轉碼錯誤資料表,可用於檢查錯誤。
- 支援多種輸入和輸出格式。 這項功能可讓您在各種資料倉儲之間載入資料。
事前準備
安裝 Mainframe Connector,將其做為程序庫 (PROCLIB) 使用。
將大型主機上經過本機轉碼的資料移至 Google Cloud
如要在大型主機上將資料轉碼,然後移至 BigQuery,您必須執行下列工作:
- 讀取並轉碼大型主機上的資料集,然後以 ORC 格式上傳至 Cloud Storage (如要瞭解
qsam commands
僅支援的其他格式,請參閱 TranscodeFormat)。轉碼作業會在qsam decode
或gsutil cp
作業期間完成 (視您選擇的指令而定),其中大型主機擴充二進位編碼十進位交換碼 (EBCDIC) 資料集會在複製到 Cloud Storage 值區期間,轉換為 UTF-8 中的 ORC 格式。 - 將資料集載入 BigQuery 資料表。
- (選用) 對 BigQuery 資料表執行 SQL 查詢。
- (選用) 將資料從 BigQuery 匯出回大型主機。
以下各節將詳細說明如何使用 qsam
指令和 gsutil cp
指令,將在大型主機上本機轉碼的資料移至 Google Cloud 。
使用 qsam
指令在本機轉碼
如要使用 qsam
指令在本機大型主機上轉碼大型主機資料,請按照下列步驟操作:
建立工作,讀取大型主機上的資料集並轉碼為 ORC 格式,如下列指令所示。從 INFILE 資料集讀取資料,並從 COPYBOOK DD 讀取記錄版面配置。輸入資料集必須是具有固定或可變記錄長度的佇列循序存取方法 (QSAM) 檔案。
您可以使用
--transcode-configuration
引數提供轉碼器設定檔,修改 Mainframe Connector 轉碼程序的預設行為。//STEP01 EXEC BQSH //INFILE DD DSN=<HLQ>.DATA.FILENAME,DISP=SHR //COPYBOOK DD DISP=SHR,DSN=<HLQ>.COPYBOOK.CPY //CONFIG DD DISP=SHR,DSN=<HLQ>.CONFIG.SETTINGS //STDIN DD * BUCKET=BUCKET_NAME qsam decode --copybook dd:COPYBOOK --transcode-configuration dd:CONFIG dd:INFILE gs://$BUCKET/tablename /*
將
BUCKET_NAME
替換為要複製大型主機資料的 Cloud Storage bucket 名稱。為避免在每個工作控制語言 (JCL) 程序中指定專案 ID 和 bucket 名稱等變數,您可以將這些變數新增至 BQSH PROCLIB,並在多個 JCL 程序中將其做為環境變數參照。此外,由於環境專屬變數是在環境的 BQSH PROCLIB 中設定,因此這種做法有助於在正式和非正式環境之間順利轉換。
在本範例中,
DD DataPath
用於指定副本、輸入和轉碼設定的路徑。如要瞭解其他做法,請參閱DataPath
。如要記錄在此程序中執行的指令,可以啟用載入統計資料。
建立並提交 BigQuery 載入工作,將
tablename.orc
中的 ORC 檔案分割區載入MY_DATASET.MY_TABLE
,如下所示。Example JCL //STEP02 EXEC BQSH //STDIN DD * BUCKET=BUCKET_NAME PROJECT=PROJECT_NAME bq load --project_id=$PROJECT \ myproject:MY_DATASET.MY_TABLE \ gs://$BUCKET/tablename.orc/* /*
更改下列內容:
BUCKET_NAME
:Cloud Storage bucket 的名稱,其中包含您要載入至 BigQuery 的 ORC 檔案。PROJECT_NAME
:要在其中執行查詢的專案名稱。
(選用) 建立並提交 BigQuery 查詢作業,從 QUERY DD 檔案執行 SQL 讀取作業。查詢通常是
MERGE
或SELECT INTO DML
陳述式,可轉換 BigQuery 資料表。請注意,Mainframe Connector 會記錄工作指標,但不會將查詢結果寫入檔案。您可以透過多種方式查詢 BigQuery,包括內嵌、使用 DD 的獨立資料集,或使用 DSN 的獨立資料集。
Example JCL //STEP03 EXEC BQSH //QUERY DD DSN=<HLQ>.QUERY.FILENAME,DISP=SHR //STDIN DD * PROJECT=PROJECT_NAME LOCATION=LOCATION bq query --project_id=$PROJECT \ --location=$LOCATION/* /*
更改下列內容:
PROJECT_NAME
:要在其中執行查詢的專案名稱。LOCATION
:執行查詢的位置。建議您在靠近資料的位置執行查詢。
(選用) 建立並提交匯出工作,從 QUERY DD 檔案執行 SQL 讀取作業,然後將產生的資料集匯出至大型主機,做為二進位檔案。
您可以使用
--transcode-configuration
引數提供轉碼器設定檔,修改 Mainframe Connector 轉碼程序的預設行為。//STEP04 EXEC BQSH //OUTFILE DD DSN=<HLQ>.DATA.FILENAME,DISP=SHR //COPYBOOK DD DISP=SHR,DSN=<HLQ>.COPYBOOK.CPY //CONFIG DD DISP=SHR,DSN=<HLQ>.CONFIG.SETTINGS //QUERY DD DSN=<HLQ>.QUERY.FILENAME,DISP=SHR //STDIN DD * PROJECT=PROJECT_NAME qsam encode \ dd:QUERY dd:OUTFILE --copybook dd:COPYBOOK --transcode-configuration dd:CONFIG --input-format=BIGQUERY \ --input-parameter project_id=PROJECT_NAME \ --input-parameter location=LOCATION/* /*
更改下列內容:
PROJECT_NAME
:要在其中執行查詢的專案名稱。LOCATION
:執行查詢的位置。建議您在靠近資料的位置執行查詢。
資料會匯出至 OUTFILE DD 資料集。記錄版面配置由 COPYBOOK DD 說明。如需其他 copybook、outfile 和轉碼設定路徑選項,請參閱
DataPath
。
使用 gsutil cp
指令在本機轉碼
如要使用 gsutil cp
指令在本機大型主機上轉碼大型主機資料,請按照下列步驟操作:
建立工作,讀取大型主機上的資料集並轉碼為 ORC 格式,如下列指令所示。從 INFILE 資料集讀取資料,並從 COPYBOOK DD 讀取記錄版面配置。輸入資料集必須是具有固定或可變記錄長度的佇列循序存取方法 (QSAM) 檔案。
//STEP01 EXEC BQSH //INFILE DD DSN=<HLQ>.DATA.FILENAME,DISP=SHR //COPYBOOK DD DISP=SHR,DSN=<HLQ>.COPYBOOK.FILENAME //STDIN DD * BUCKET=BUCKET_NAME gsutil cp --replace gs://$BUCKET/tablename.orc /*
將
BUCKET_NAME
替換為要複製大型主機資料的 Cloud Storage bucket 名稱。為避免在每個 JCL 程序中指定專案 ID 和 bucket 名稱等變數,您可以將這些變數新增至 BQSH PROCLIB,並在多個 JCL 程序中將其參照為環境變數。此外,由於環境專屬變數是在環境的 BQSH PROCLIB 中設定,因此這種做法也有助於在正式和非正式環境之間順利轉換。如需 Mainframe Connector 支援的完整環境變數清單,請參閱「環境變數」。
在本例中,標準輸入 (STDIN) 會以串流內資料的形式提供給 STDIN DD。或者,您也可以使用資料來源名稱 (DSN) 提供這項輸入內容,這樣就能更輕鬆地管理符號替代作業。
如要記錄在此程序中執行的指令,可以啟用載入統計資料。
建立並提交 BigQuery 載入工作,將
tablename.orc
中的 ORC 檔案分割區載入MY_DATASET.MY_TABLE
,如下所示。Example JCL //STEP02 EXEC BQSH //STDIN DD * BUCKET=BUCKET_NAME PROJECT=PROJECT_NAME bq load --project_id=$PROJECT \ myproject:MY_DATASET.MY_TABLE \ gs://$BUCKET/tablename.orc/* /*
更改下列內容:
BUCKET_NAME
:Cloud Storage bucket 的名稱,其中包含您要載入至 BigQuery 的 ORC 檔案。PROJECT_NAME
:要在其中執行查詢的專案名稱。
(選用) 建立並提交 BigQuery 查詢作業,從 QUERY DD 檔案執行 SQL 讀取作業。查詢通常是
MERGE
或SELECT INTO DML
陳述式,可轉換 BigQuery 資料表。請注意,Mainframe Connector 會記錄工作指標,但不會將查詢結果寫入檔案。您可以透過多種方式查詢 BigQuery,包括內嵌、使用 DD 的獨立資料集,或使用 DSN 的獨立資料集。
Example JCL //STEP03 EXEC BQSH //QUERY DD DSN=<HLQ>.QUERY.FILENAME,DISP=SHR //STDIN DD * PROJECT=PROJECT_NAME LOCATION=LOCATION bq query --project_id=$PROJECT \ --location=$LOCATION/* /*
更改下列內容:
PROJECT_NAME
:要在其中執行查詢的專案名稱。LOCATION
:執行查詢的位置。建議您在靠近資料的位置執行查詢。
(選用) 建立並提交匯出工作,從 QUERY DD 檔案執行 SQL 讀取作業,然後將產生的資料集匯出至大型主機,做為二進位檔案。
Example JCL //STEP04 EXEC BQSH //OUTFILE DD DSN=<HLQ>.DATA.FILENAME,DISP=SHR //COPYBOOK DD DISP=SHR,DSN=<HLQ>.COPYBOOK.FILENAME //QUERY DD DSN=<HLQ>.QUERY.FILENAME,DISP=SHR //STDIN DD * PROJECT=PROJECT_NAME DATASET_ID=DATASET_ID DESTINATION_TABLE=DESTINATION_TABLE bq export --project_id=$PROJECT \ --dataset_id=$DATASET_ID \ --destination_table=$DESTINATION_TABLE \ --location="US" \ --remoteHost <mainframe-connector-url>.a.run.app \ --remotePort 443 /*
更改下列內容:
PROJECT_NAME
:要執行查詢的專案名稱。DATASET_ID
:包含要匯出資料表的 BigQuery 資料集 ID。DESTINATION_TABLE
:要匯出的 BigQuery 資料表。
資料會匯出至 OUTFILE DD 資料集。記錄版面配置由 COPYBOOK DD 說明。