在 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 作業期間執行,在將大型主機擴充二進位編碼十進位交換碼 (EBCDIC) 資料集複製至 Cloud Storage 值區時,會將其轉換為 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 值區。

後續步驟