在 Google Cloud 上遠端轉碼大型主機資料

在大型主機上進行本機轉碼是 CPU 密集型程序,會導致每秒百萬指令數 (MIPS) 消耗量偏高。為避免發生這種情況,您可以使用 Cloud Run,在Google Cloud 上以遠端方式移動大型主機資料並轉碼為最佳化資料列直欄 (ORC) 格式,然後將資料移至 Cloud Storage。這樣一來,大型主機就能專心處理重要業務工作,還能減少 MIPS 消耗量。

下圖說明如何將大型主機資料移至Google Cloud ,並使用 Cloud Run 遠端轉碼為 ORC 格式,然後將內容移至 BigQuery。

遠端轉碼大型主機資料
遠端轉碼大型主機資料

事前準備

將大型主機資料移至 Google Cloud ,並使用 Cloud Run 遠端轉碼

如要將大型主機資料移至 Google Cloud ,並使用 Cloud Run 遠端轉碼,請執行下列工作:

  1. 讀取並轉碼大型主機上的資料集,然後以 ORC 格式上傳至 Cloud Storage。轉碼作業會在 gsutil cp 作業期間完成,也就是在複製到 Cloud Storage 值區時,將大型主機擴充二進位編碼十進位交換碼 (EBCDIC) 資料集轉換為 UTF-8 中的 ORC 格式。
  2. 將資料集載入 BigQuery 資料表。
  3. (選用) 對 BigQuery 資料表執行 SQL 查詢。
  4. (選用) 將資料從 BigQuery 匯出至 Cloud Storage 中的二進位檔案。

如要執行這些工作,請按照下列步驟操作:

  1. 在大型主機上建立工作,讀取大型主機上的資料集,並轉碼為 ORC 格式,如下所示。從 INFILE 資料集讀取資料,並從 COPYBOOK DD 讀取記錄版面配置。輸入資料集必須是具有固定或可變記錄長度的佇列循序存取方法 (QSAM) 檔案。

    如需 Mainframe Connector 支援的環境變數完整清單,請參閱「環境變數」。

    //STEP01 EXEC BQSH
    //INFILE DD DSN=<HLQ>.DATA.FILENAME,DISP=SHR
    //COPYBOOK DD DISP=SHR,DSN=<HLQ>.COPYBOOK.FILENAME
    //STDIN DD *
    gsutil cp --replace gs://mybucket/tablename.orc --remote \
      --remoteHost <mainframe-connector-url>.a.run.app \
      --remotePort 443
    /*
    

    如要記錄這個程序執行的指令,可以啟用載入統計資料

  2. (選用) 建立並提交 BigQuery 查詢作業,從 QUERY DD 檔案執行 SQL 讀取作業。查詢通常是 MERGESELECT 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 \
      --remoteHost <mainframe-connector-url>.a.run.app \
      --remotePort 443/*
    /*
    

    此外,您必須設定環境變數 BQ_QUERY_REMOTE_EXECUTION=true

    更改下列內容:

    • PROJECT_NAME:要執行查詢的專案名稱。
    • LOCATION:執行查詢的位置。建議您在靠近資料的位置執行查詢。
  3. (選用) 建立並提交匯出工作,從 QUERY DD 檔案執行 SQL 讀取作業,然後將產生的資料集匯出至 Cloud Storage 做為二進位檔案。

    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
    BUCKET=BUCKET
    bq export --project_id=$PROJECT \
      --dataset_id=$DATASET_ID \
      --destination_table=$DESTINATION_TABLE \
      --location="US" \
      --bucket=$BUCKET \
      --remoteHost <mainframe-connector-url>.a.run.app \
      --remotePort 443
    /*
    

    更改下列內容:

    • PROJECT_NAME:要執行查詢的專案名稱。
    • DATASET_ID:包含要匯出資料表的 BigQuery 資料集 ID。
    • DESTINATION_TABLE:要匯出的 BigQuery 資料表。
    • BUCKET:用於存放輸出二進位檔案的 Cloud Storage bucket。

後續步驟