在大型机上本地转码数据是一项 CPU 密集型进程,会导致每秒百万条指令 (MIPS) 消耗量较高。为避免出现这种情况 使用 Cloud Run 远程移动和转码大型主机数据, Google Cloud这样,您就可以将大型机释放出来执行业务关键任务,同时还能减少 MIPS 消耗。
下图展示了如何将大型主机数据移至 Cloud Storage 存储桶、使用 Cloud Run 将数据转码为 ORC 格式,然后将内容移至 BigQuery。
准备工作
- 在 Cloud Run 上部署大型主机连接器。
- 创建服务账号或指定要与大型机连接器搭配使用的现有服务账号。此服务账号必须具有访问 Cloud Storage 存储桶、BigQuery 数据集以及您要使用的任何其他 Google Cloud 资源的权限。
- 确保为您创建的服务账号分配了 Cloud Run Invoker 角色。
将大型主机数据移至 Google Cloud,并使用 Cloud Run 远程对其进行转码
如需将大型主机数据移至 Google Cloud 并使用 Cloud Run 远程进行转码,您必须执行以下任务:
- 读取大型主机上的数据集并对其进行转码,然后以 ORC 格式将其上传到 Cloud Storage。转码在
cp
操作期间完成, 其中,大型主机扩展二进制编码十进制交换码 (EBCDIC) 数据集在复制到新副本的过程中,转换为 UTF-8 的 ORC 格式。 Cloud Storage 存储桶。 - 将数据集加载到 BigQuery 表中。
- (可选)对 BigQuery 表执行 SQL 查询。
- (可选)将数据从 BigQuery 导出到 Cloud Storage 中的二进制文件。
如需执行上述任务,请按以下步骤操作:
在大型机上,创建一个作业来读取大型机上的数据集,并将其转码为 ORC 格式,如下所示。从 INFILE 数据集,以及 COPYBOOK DD 中的记录布局。 输入数据集必须是已排队的顺序访问方法 (QSAM) 文件,且 固定或可变的记录长度。
如需查看 Mainframe 连接器支持的环境变量的完整列表,请参阅环境变量。
//STEP01 EXEC BQSH //INFILE DD DSN=<HLQ>.DATA.FILENAME,DISP=SHR //COPYBOOK DD DISP=SHR,DSN=<HLQ>.COPYBOOK.FILENAME //STDIN DD * gsutil cp --replace gs://mybucket/tablename.orc \ --remoteHost <mainframe-connector-url>.a.run.app \ --remotePort 443 /*
如果要记录在此过程中执行的命令,您可以启用加载统计信息。
(可选)创建并提交一个 BigQuery 查询作业,用于从 QUERY DD 文件执行 SQL 读取。通常,查询为
MERGE
或SELECT INTO DML
执行 BigQuery 表转换的语句。注意事项 大型主机连接器会记录作业指标但不编写查询 导出到文件。您可以通过多种内嵌方式查询 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
:查询的执行位置。我们建议您在靠近数据的位置执行查询。
(可选)创建并提交一个导出作业,用于从 QUERY DD 文件和导出 将生成的数据集以二进制文件的形式保存到 Cloud Storage。
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 BUCKET=BUCKET bq export --project_id=$PROJECT \ --dataset_id=$DATASET_ID \ --destination_table=$DESTINATION_TABLE \ --location="US" \ --bucket=$BUCKET \ --remoteHost <mainframe-connector-url>.a.run.app \ --remotePort 443 /*
替换以下内容:
PROJECT_NAME
:您要执行查询的项目的名称。DATASET_ID
:包含要导出的表的 BigQuery 数据集 ID。DESTINATION_TABLE
:您要导出的 BigQuery 表。BUCKET
:该 Cloud Storage 存储桶 包含输出二进制文件。