将本地转码的大型主机数据移至 Google Cloud

本页面介绍了如何在大型主机上将大型主机数据本地转码为支持的格式,然后将内容移至 Google Cloud。

准备工作

将 Mainframe Connector 安装到您要用作过程库 (PROCLIB) 的任何大型主机分区数据集。

qsam 和 vsam 命令

转码是将信息从一种编码表示形式转换为另一种编码表示形式的过程。Mainframe Connector 提供 qsam 和 vsam 命令,用于在大型主机上本地转码数据。

qsam decode 和 vsam decode 命令使用 COBOL 副本将大型主机数据集的记录转换为 ORC、CSV、JSONL 或 AVRO 等文件格式,并将输出写入本地或 Cloud Storage 存储桶。例如,您可以将 EBCDIC 编码的 QSAM 数据集转换为 UTF-8 ORC 文件。如需了解所有支持的输出格式,请参阅 TranscodeFormat。

qsam encode 命令则相反:它会将 CSV、JSONL、ORC 或 AVRO 数据或 BigQuery 查询结果转换为 QSAM 数据集。如需了解所有支持的输入格式,请参阅 TranscodeInputFormat。

这些命令提供以下功能:

  • 支持复合数据类型,包括 OCCURS 子句(列表)、REDEFINES 子句和嵌套记录。如需详细了解这些数据类型,请参阅 qsam 和 vsam 转码参考。
  • 支持通过转码器配置文件配置转码过程。此功能在将数据解码为 Google Cloud以及将数据编码回大型主机时提供了更大的灵活性。
  • 支持创建溢出数据集,这是一个可用于错误检查的转码错误表。
  • 支持多种输入和输出格式。 借助此功能,您可以在各种数据仓库之间加载数据。

在本地对大型主机数据进行转码,并将其迁移到 Google Cloud

借助 Mainframe Connector,您可以在大型主机上本地转码数据,然后将其移至 Cloud Storage。请按照以下步骤操作:

  1. 创建一个作业,用于读取大型主机上的数据集并将其转码为 ORC 格式。从 INFILE 数据集中读取数据,并从 COPYBOOK DD 中读取记录布局。

    您可以使用 --transcode-configuration 参数提供转码器配置文件,从而修改 Mainframe Connector 转码过程的默认行为。

    • 如果输入数据集是具有固定或可变记录长度的排队顺序访问方法 (QSAM) 文件,请使用以下命令:

      //STEP01 EXEC BQSH
      //INFILE DD DSN=<HLQ>.DATA.FILENAME,DISP=SHR
      //COPYBOOK DD DISP=SHR,DSN=<HLQ>.COPYBOOK.CPY
      //CONFIG DD DISP=SHR,DSN=<HLQ>.CONFIG.SETTINGS
      //STDIN DD *
      BUCKET=BUCKET_NAME
      qsam decode --copybook dd:COPYBOOK --transcode-configuration dd:CONFIG dd:INFILE gs://$BUCKET/tablename
      /*
      
    • 如果输入数据集是具有固定或可变记录长度的虚拟存储访问方法 (VSAM) 文件,请使用以下命令:

      //STEP01 EXEC BQSH
      //INFILE DD DSN=<HLQ>.DATA.FILENAME,DISP=SHR
      //COPYBOOK DD DISP=SHR,DSN=<HLQ>.COPYBOOK.CPY
      //CONFIG DD DISP=SHR,DSN=<HLQ>.CONFIG.SETTINGS
      //STDIN DD *
      BUCKET=BUCKET_NAME
      vsam decode --copybook dd:COPYBOOK --transcode-configuration dd:CONFIG dd:INFILE gs://$BUCKET/tablename
      /*
      

      将 BUCKET_NAME 替换为要将大型机数据复制到的 Cloud Storage 存储桶的名称。

    在此示例中,DD DataPath 用于指定 copybook、输入和转码配置的路径。如需了解其他选项,请参阅 DataPath。

    为避免在每个作业控制语言 (JCL) 过程中指定项目 ID 和存储桶名称等变量,您可以在 BQSH PROCLIB 中添加这些变量,并在多个 JCL 过程中将其作为环境变量进行引用。此方法还简化了生产环境和非生产环境之间的转换,因为环境专用变量是在环境的 BQSH PROCLIB 中设置的。

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

  2. 创建并提交 BigQuery 加载作业,以将转码后的文件加载到 BigQuery。例如,如果您将数据转码为 ORC 格式,则可以将 ORC 文件分区从 tablename.orc 加载到 MY_DATASET.MY_TABLE,如下所示:

    Example JCL
    //STEP02 EXEC BQSH
    //STDIN DD *
    BUCKET=BUCKET_NAME
    PROJECT=PROJECT_NAME
    bq load --project_id=$PROJECT \
      myproject:MY_DATASET.MY_TABLE \
      gs://$BUCKET/tablename.orc/*
    /*
    

    替换以下内容:

    • BUCKET_NAME:包含要加载到 BigQuery 的 ORC 文件的 Cloud Storage 存储桶的名称。
    • PROJECT_NAME:您要在其中执行查询的项目的名称。
  3. 可选:创建并提交 BigQuery 查询作业,该作业会从 QUERY DD 文件执行 SQL 读取。通常,查询将是导致 BigQuery 表转换的 MERGE 或 SELECT 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/*
    /*
    

    替换以下内容:

    • PROJECT_NAME:您要在其中执行查询的项目的名称。
    • LOCATION:执行查询的位置。我们建议您在靠近数据的位置执行查询。
  4. 可选:创建并提交导出作业,该作业会从 QUERY DD 文件执行 SQL 读取,并将生成的数据集作为二进制文件导出到大型主机。

    //STEP04 EXEC BQSH
    //OUTFILE DD DSN=<HLQ>.DATA.FILENAME,DISP=SHR
    //COPYBOOK DD DISP=SHR,DSN=<HLQ>.COPYBOOK.CPY
    //CONFIG DD DISP=SHR,DSN=<HLQ>.CONFIG.SETTINGS
    //QUERY DD DSN=<HLQ>.QUERY.FILENAME,DISP=SHR
    //STDIN DD *
    
    PROJECT=PROJECT_NAME
    qsam encode \
      dd:QUERY
      dd:OUTFILE
      --copybook dd:COPYBOOK
      --transcode-configuration dd:CONFIG
      --input-format=BIGQUERY \
      --input-parameter project_id=PROJECT_NAME \
      --input-parameter location=LOCATION/*
    /*
    

    替换以下内容:

    • PROJECT_NAME:您要在其中执行查询的项目的名称。
    • LOCATION:执行查询的位置。我们建议您在靠近数据的位置执行查询。

    您可以使用 --transcode-configuration 参数提供转码器配置文件,从而修改 Mainframe Connector 转码过程的默认行为。

    数据会导出到 OUTFILE DD 数据集。记录布局由 COPYBOOK DD 描述。如需了解 copybook、outfile 和转码配置路径的其他选项,请参阅 DataPath。