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

本页介绍了如何在大型机本地将大型机数据转码为优化行列式 (ORC) 格式,然后将内容移至 BigQuery。

转码是将信息从一种编码表示形式转换为另一种编码表示形式(在本例中为 ORC)的过程。ORC 是一种开源列式数据格式,广泛应用于 Apache Hadoop 生态系统,并且受 BigQuery 支持。

准备工作

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

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

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

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

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

  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 中设置的,因此此方法还有助于您在生产环境和非生产环境之间实现无缝过渡。如需查看大型机连接器支持的环境变量的完整列表,请参阅环境变量

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

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

  2. 创建并提交一个 BigQuery 加载作业,用于将 ORC 文件分区从 my_table.orc 加载到 MY_DATASET.MY_TABLE,如下所示。

    Example JCL
    //STEP02 EXEC BQSH
    //STDIN DD *
    PROJECT=PROJECT_NAME
    bq load --project_id=$PROJECT \
      myproject:DATASET.TABLE \
      gs://bucket/tablename.orc/*
    /*
    

    替换以下内容:

    • PROJECT_NAME:您要执行查询的项目的名称。
  3. (可选)创建并提交一个 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/*
    /*
    

    替换以下内容:

    • 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 描述。