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

本页介绍了如何在大型机本地将大型机数据转码为受支持的格式,然后将内容移至 BigQuery。转码是将信息从一种编码表示形式转换为另一种编码表示形式的过程。本页介绍了如何使用 Mainframe Connector 将大型主机数据转码为优化行列格式 (ORC),然后将数据保存到 Cloud Storage。

Mainframe Connector 提供了两种在主机上本地转码主机数据的方法。

qsam 命令的优势

qsam 命令具有以下优势:

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

准备工作

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

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

如需在大型机上本地转码数据,然后将其移至 BigQuery,您必须执行以下任务:

  1. 读取大型机上的数据集并对其进行转码,然后以 ORC 格式将其上传到 Cloud Storage(如需了解仅 qsam commands 支持的其他格式,请参阅 TranscodeFormat)。转码是在 qsam decodegsutil cp 操作期间完成的(具体取决于您选择的命令),其中,在复制到 Cloud Storage 存储桶期间,大型机扩展二进制编码十进制交换代码 (EBCDIC) 数据集会转换为 UTF-8 格式的 ORC 格式。
  2. 将数据集加载到 BigQuery 表中。
  3. (可选)对 BigQuery 表执行 SQL 查询。
  4. (可选)将数据从 BigQuery 导出回大型机。

以下部分详细介绍了如何使用 qsam 命令gsutil cp 命令将在大型机本地转码的数据移至其他位置。 Google Cloud

使用 qsam 命令在本地进行转码

如需使用 qsam 命令在大型主机上本地转码大型主机数据,请按以下步骤操作:

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

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

    //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
    /*
    

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

    为避免在每个作业控制语言 (JCL) 过程中指定项目 ID 和存储桶名称等变量,您可以在 BQSH PROCLIB 中添加这些变量,并在多个 JCL 过程中将其作为环境变量引用。由于环境专用变量是在环境的 BQSH PROCLIB 中设置的,因此这种方法还有助于您在生产环境和非生产环境之间实现无缝过渡。

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

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

  2. 创建并提交一个 BigQuery 加载作业,用于将 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 表的 MERGESELECT INTO DML 语句。请注意,Mainframe 连接器会记录作业指标,但不会将查询结果写入文件。

    您可以通过多种方式查询 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 读取,并将生成的数据集作为二进制文件导出到大型机。

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

    //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:查询的执行位置。我们建议您在靠近数据的位置执行查询。

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

使用 gsutil cp 命令在本地进行转码

如需使用 gsutil cp 命令在大型主机上本地转码大型主机数据,请按以下步骤操作:

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

    //STEP01 EXEC BQSH
    //INFILE DD DSN=<HLQ>.DATA.FILENAME,DISP=SHR
    //COPYBOOK DD DISP=SHR,DSN=<HLQ>.COPYBOOK.FILENAME
    //STDIN DD *
    BUCKET=BUCKET_NAME
    gsutil cp --replace gs://$BUCKET/tablename.orc
    /*
    

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

    为避免在每个 JCL 过程内指定项目 ID 和存储桶名称等变量,您可以在 BQSH PROCLIB 中添加这些变量,并在多个 JCL 过程中将其作为环境变量引用。由于环境专用变量是在环境的 BQSH PROCLIB 中设置的,因此此方法还有助于您在生产环境和非生产环境之间实现无缝过渡。如需查看 Mainframe 连接器支持的环境变量的完整列表,请参阅环境变量

    在此示例中,标准输入 (STDIN) 作为数据流内数据提供给 STDIN DD。或者,您也可以使用数据源名称 (DSN) 提供此输入,这样可以更轻松地管理符号替换。

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

  2. 创建并提交一个 BigQuery 加载作业,用于将 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 表的 MERGESELECT INTO DML 语句。请注意,Mainframe 连接器会记录作业指标,但不会将查询结果写入文件。

    您可以通过多种方式查询 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 读取,并将生成的数据集作为二进制文件导出到大型机。

    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
    bq export --project_id=$PROJECT \
      --dataset_id=$DATASET_ID \
      --destination_table=$DESTINATION_TABLE \
      --location="US" \
      --remoteHost <mainframe-connector-url>.a.run.app \
      --remotePort 443
    /*
    

    替换以下内容:

    • PROJECT_NAME:您要执行查询的项目的名称。
    • DATASET_ID:包含要导出的表的 BigQuery 数据集 ID。
    • DESTINATION_TABLE:要导出的 BigQuery 表。

    数据会导出到 OUTFILE DD 数据集。记录布局由 COPYBOOK DD 描述。