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

这一页介绍如何将大型主机数据转码为本地的 Optimized Row Columnar (ORC) 格式, 然后将内容迁移到 BigQuery。

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

准备工作

安装大型主机连接器 您要用作过程库的任何大型主机分区数据集 (PROCLIB).

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

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

  1. 读取大型主机上的数据集并对其进行转码,然后以 ORC 格式将其上传到 Cloud Storage。转码是在 cp 操作期间完成的,其中,在复制到 Cloud Storage 存储桶期间,大型机扩展二进制编码十进制交换代码 (EBCDIC) 数据集会转换为 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 查询作业,用于执行 SQL 读取 QUERY DD 文件。 通常,查询将是导致转换 BigQuery 表的 MERGESELECT INTO DML 语句。请注意,Mainframe Connector 会记录作业指标,但不会将查询结果写入文件。

    您可以通过多种方式查询 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:查询的位置 。我们建议您在靠近数据的位置执行查询。
  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 描述。