在 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) 数据集在复制到新副本的过程中,转换为 UTF-8 的 ORC 格式。 Cloud Storage 存储桶。
  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 \
      --remoteHost <mainframe-connector-url>.a.run.app \
      --remotePort 443
    /*
    

    如果要记录在此过程中执行的命令,您可以启用加载统计信息

  2. (可选)创建并提交一个 BigQuery 查询作业,用于从 QUERY DD 文件执行 SQL 读取。通常,查询为 MERGESELECT INTO DML 执行 BigQuery 表转换的语句。注意事项 大型主机连接器会记录作业指标但不编写查询 导出到文件。

    您可以通过多种内嵌方式查询 BigQuery,使用单独的 数据集,或使用 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 文件和导出 将生成的数据集以二进制文件的形式保存到 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 存储桶 包含输出二进制文件。

后续步骤