本页介绍了如何在 Cloud Run 上安装 Mainframe Connector、转码数据、将其保存到 BigQuery 以及从 BigQuery 导出数据。
Mainframe Connector 版本 5.13.0 及更高版本支持在 Google Cloud上将 Mainframe Connector 作为独立作业运行。借助此功能,您可以将 Mainframe Connector 作为容器化批量作业运行,例如作为 Cloud Run 作业、Google Kubernetes Engine 作业或在 Docker 容器中运行。此选项可帮助您避免在大型机上本地安装 Mainframe Connector,并让您更轻松地将大型机队列式顺序访问方法 (QSAM) 文件解析集成到现有的提取、转换和加载 (ETL) 工作流中。
使用独立版本的主机连接器时,您必须自行设置将 QSAM 文件加载到 Google Cloud 的 ETL 工作流。
准备工作
- 在 Cloud Run 上部署 Mainframe Connector。
- 创建服务账号或指定要与大型机连接器搭配使用的现有服务账号。此服务账号必须有权访问您要使用的 Cloud Storage 存储分区、BigQuery 数据集以及任何其他 Google Cloud 资源。
- 确保为您创建的服务账号分配了 Cloud Run Invoker 角色。
- 确保大型机数据已作为 QSAM 文件在 Google Cloud 上提供。
在 Cloud Run 上使用 Mainframe Connector 在独立模式下转码数据
如需在独立模式下使用 Mainframe Connector 转码数据,请按以下步骤操作:
创建一个 YAML 文件,并在其中添加命令来读取数据集、将其转码为 ORC 格式,然后将其上传到 Cloud Storage。输入数据集必须是记录长度固定或可变的 QSAM 文件。您可以使用以下示例 YAML 文件读取数据集,将其转码为 ORC 格式,然后将其上传到 Cloud Storage。
在以下示例中,从 INFILE 数据集读取数据,并从 COPYBOOK DD 读取记录布局。
environmentVariables: - name: "INFILE" value: <var>"INFILE"</var> - name: "INFILE_DSN" value: <var>"INFILE_DSN"</var> - name: "GCSDSNURI" value: <var>"INFILE_DSN_FILEPATH"</var> - name: "COPYBOOK" value: <var>"COPYBOOK_FILEPATH"</var> - name: "LOG_PROJECT" value: <var>"LOG_PROJECT"</var> - name: "IBM_JAVA_OPTIONS" value: "-XX:+UseContainerSupport" command: gsutil cp gs://outputbucket/output --parallelism 8 --maxChunkSize "512Mib" --parser_type=copybook
替换以下内容:
INFILE
:输入文件的名称。INFILE_DSN
:输入数据源名称 (DSN) 文件的名称。INFILE_DSN_FILEPATH
:输入 DSN 文件的路径。COPYBOOK_FILEPATH
:复制簿 DD 的路径。LOG_PROJECT
:日志项目的名称。
以下是 YAML 文件示例:
environmentVariables: - name: "INFILE" value: "input.dat" - name: "INFILE_DSN" value: "input.dat" - name: "GCSDSNURI" value: "gs://inputbucket/inputfolder" - name: "COPYBOOK" value: "gs://inputbucket/copybook.cpy" - name: "LOG_PROJECT" value: "the log project" - name: "IBM_JAVA_OPTIONS" value: "-XX:+UseContainerSupport" command: gsutil cp gs://outputbucket/output --parallelism 8 --maxChunkSize "512Mib" --parser_type=copybook
如需查看 Mainframe 连接器支持的环境变量的完整列表,请参阅环境变量。
如果您想记录在此过程中执行的命令,可以启用加载统计信息。
使用以下命令创建
job.yaml
文件。kind: Job metadata: name: JOB spec: template: spec: template: spec: containers: - image: IMAGE command: - bash - /opt/mainframe-connector/standalone.sh - --argsFrom - LOCATION_OF_THE_COMMAND_YAML_FILE
替换以下内容:
- 将 JOB 替换为 Cloud Run 作业的名称。 作业名称不得超过 49 个字符,并且在每个区域和项目中必须是唯一的。
- 将 IMAGE 替换为作业容器映像的网址,例如
us-docker.pkg.dev/cloudrun/container/job:latest
。 - 将 LOCATION_OF_THE_COMMAND_YAML_FILE 替换为您在上一步中创建的 YAML 文件的位置。
使用以下命令部署新作业:
gcloud run jobs replace job.yaml
使用以下命令执行作业:
gcloud run jobs execute JOB_NAME
将 JOB_NAME 替换为作业的名称。
如需详细了解如何创建和执行 Cloud Run 作业,请参阅创建新作业和执行作业。
将 BigQuery 表导出到大型机数据集
您可以通过创建一个 YAML 文件来将 BigQuery 表导出到 Mainframe 数据集,该文件会从 QUERY DD 文件执行 SQL 读取,并将生成的数据集作为二进制文件导出到 Cloud Storage,如下所示。
创建和执行 Cloud Run 作业的步骤与在 Cloud Run 上使用 Mainframe Connector 在独立模式下转码数据部分中所述的步骤相同。唯一的区别在于 YAML 文件中提及的说明。
environmentVariables:
- name: "COPYBOOK"
value: "<var>COPYBOOK_FILEPATH</var>"
- name: "LOG_PROJECT"
value: "<var>LOG_PROJECT</var>"
- name: "IBM_JAVA_OPTIONS"
value: "-XX:+UseContainerSupport"
command:
bq export --project_id="<var>PROJECT_NAME</var>" --location=<var>LOCATION</var> --sql="select * from project.dataset.table" --bucket="<var>BUCKET</var>"
替换以下内容:
COPYBOOK_FILEPATH
:复制簿 DD 的路径。LOG_PROJECT
:日志项目的名称。PROJECT_NAME
:您要执行查询的项目的名称。LOCATION
:查询的执行位置。我们建议您在靠近数据的位置执行查询。BUCKET
:将包含输出二进制文件的 Cloud Storage 存储桶。
以下是 YAML 文件示例:
environmentVariables:
- name: "COPYBOOK"
value: "gs://inputbucket/copybook.cpy"
- name: "LOG_PROJECT"
value: "the log project"
- name: "IBM_JAVA_OPTIONS"
value: "-XX:+UseContainerSupport"
command:
bq export --project_id="<var>PROJECT_NAME</var>" --location=US --sql="select * from project.dataset.table" --bucket="<var>BUCKET</var>"