在 Google Cloud上远程转码大型机数据

在大型机上本地转码数据是一项 CPU 密集型进程,会导致每秒百万条指令 (MIPS) 消耗量较高。为避免这种情况,您可以使用 Cloud Run 在Google Cloud上远程移动和转码大型主机数据。这样,您就可以将大型机释放出来执行业务关键任务,同时还能减少 MIPS 消耗。

下图展示了如何将大型主机数据移至 Cloud Storage 存储桶、使用 Cloud Run 将数据转码为 ORC 格式,然后将内容移至 BigQuery。

远程转码大型主机数据
远程转码大型机数据

准备工作

将大型主机数据迁移到 Google Cloud ,并使用 Cloud Run 远程进行转码

如需将大型主机数据移至 Google Cloud ,并使用 Cloud Run 远程进行转码,您必须执行以下任务:

  1. 读取大型主机上的数据集并对其进行转码,然后以 ORC 格式将其上传到 Cloud Storage。转码是在 cp 操作期间完成的,其中大型机扩展二进制编码十进制交换代码 (EBCDIC) 数据集会在复制到 Cloud Storage 存储桶期间转换为 UTF-8 中的 ORC 格式。
  2. 将数据集加载到 BigQuery 表中。
  3. (可选)对 BigQuery 表执行 SQL 查询。
  4. (可选)将数据从 BigQuery 导出到 Cloud Storage 中的二进制文件。

如需执行上述任务,请按以下步骤操作:

  1. 在大型机上,创建一个作业来读取大型机上的数据集,并将其转码为 ORC 格式,如下所示。从 INFILE 数据集读取数据,并从 COPYBOOK DD 读取记录布局。输入数据集必须是具有固定或可变记录长度的队列式顺序访问方法 (QSAM) 文件。

    如需查看 Mainframe 连接器支持的环境变量的完整列表,请参阅环境变量

    //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 读取。通常,查询将是导致转换 BigQuery 表的 MERGESELECT INTO DML 语句。请注意,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 存储桶。

后续步骤