使用虛擬磁帶庫將轉碼大型主機資料移至 Google Cloud

在大型主機上本機轉碼資料是 CPU 密集型程序,會導致每秒百萬指令數 (MIPS) 消耗量偏高。為避免這種情況,您可以使用 Cloud Run 在Google Cloud上遠端移動及轉碼大型主機資料。這樣一來,大型主機就能釋出資源,用於處理業務上的重要工作,同時也能減少 MIPS 用量。

如果您想將大量資料 (每天約 500 GB 以上) 從主機轉移至 Google Cloud,但不想使用主機來執行這項作業,可以使用支援雲端的虛擬磁帶庫 (VTL) 解決方案,將資料傳輸至 Cloud Storage 儲存桶。接著,您可以使用 Cloud Run 將儲存桶中的資料轉碼,並移至 BigQuery。

本頁面說明如何讀取複製到 Cloud Storage 儲存桶的大型主機資料,並將其從擴充二進位元編碼十進位元交換碼 (EBCDIC) 資料集轉碼為 UTF-8 的 ORC 格式,然後將資料集載入 BigQuery 資料表。

下圖說明如何使用 VTL 解決方案將大型主機資料移至 Cloud Storage 值區、使用 Cloud Run 將資料轉碼為 ORC 格式,然後將內容移至 BigQuery。

使用 VTL 從遠端轉碼大型主機資料
使用 VTL 從遠端轉碼大型主機資料

事前準備

  • 請選擇符合需求的 VTL 解決方案,並將大型主機資料移至 Cloud Storage 值區,並儲存為 .dat。請務必將名為 x-goog-meta-lrecl 的中繼資料鍵新增至已上傳的 .dat 檔案,且中繼資料鍵長度必須與原始檔案的記錄長度相同,例如 80。
  • 在 Cloud Run 部署 Mainframe Connector。
  • 在主機電腦中,將 GCSDSNURI 環境變數設為 Cloud Storage 值區中主機電腦資料的前置字串。
    export GCSDSNURI="gs://BUCKET/PREFIX"
    
    替換下列內容:
    • BUCKET:Cloud Storage 值區的名稱。
    • PREFIX:您要在值區中使用的前置字串。
  • 建立服務帳戶或識別要與 Mainframe Connector 搭配使用的現有服務帳戶。此服務帳戶必須具備存取 Cloud Storage 值區、BigQuery 資料集和您要使用的任何其他 Google Cloud 資源的權限。
  • 確認您建立的服務帳戶已獲派 Cloud Run 叫用者角色。

將上傳至 Cloud Storage 值區的大型主機資料轉碼

如要使用 VTL 和遠端轉碼功能將大型主機資料移至 Google Cloud ,您必須執行下列工作:

  1. 讀取 Cloud Storage 值區中的資料,並將資料轉碼為 ORC 格式。轉碼作業會將大型主機 EBCDIC 資料集轉換為 UTF-8 中的 ORC 格式。
  2. 將資料集載入 BigQuery 資料表。
  3. (選用) 對 BigQuery 資料表執行 SQL 查詢。
  4. (選用) 將資料從 BigQuery 匯出至 Cloud Storage 中的二進位檔案。

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

  1. 在大型主機中建立工作,讀取 Cloud Storage 儲存桶中的 .dat 檔案資料,並將資料轉碼為 ORC 格式,如下所示。

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

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

    更改下列內容:

    • PROJECT_NAME:您要執行查詢的專案名稱。
    • INPUT_FILENAME:您上傳至 Cloud Storage 值區的 .dat 檔案名稱。

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

  2. (選用) 建立並提交 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:查詢執行的位置。建議您在靠近資料的位置執行查詢。
  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 值區。