本页讨论了如何将大型机数据在大型机上本地转码为支持的格式,然后将内容移至 BigQuery。转码是指将信息从一种编码表示形式转换为另一种编码表示形式的过程。本页讨论了如何使用 Mainframe Connector 将大型主机数据转码为优化的行列式 (ORC),然后将数据保存到 Cloud Storage。
Mainframe Connector 提供了两种在主机上本地转码主机数据的方式。
- 使用
qsam
命令(版本 5.16.0 及更高版本) - 使用
gsutil cp
命令
qsam
命令的优势
qsam
命令具有以下优势:
- 支持复合数据类型,包括 OCCURS 子句(列表)、REDEFINES 子句和嵌套记录。如需详细了解这些数据类型,请参阅
qsam
转码参考文档。 - 支持通过转码器配置文件配置转码流程。 此功能在将数据解码为 Google Cloud以及将数据编码回大型机时,可提供更高的灵活性。
- 支持创建溢出数据集,这是一个转码错误表,可用于检查错误。
- 支持多种输入和输出格式。 借助此功能,您可以将数据加载到各种数据仓库,也可以从这些数据仓库加载数据。
准备工作
将 Mainframe Connector 安装到您要用作过程库 (PROCLIB) 的任何大型机分区数据集。
将大型主机上本地转码的数据移动到 Google Cloud
如需在大型机上对数据进行本地转码,然后将其移至 BigQuery,您必须执行以下任务:
- 读取并转码大型机上的数据集,然后以 ORC 格式将其上传到 Cloud Storage(对于仅受
qsam commands
支持的其他格式,请参阅 TranscodeFormat)。转码是在qsam decode
或gsutil cp
操作期间完成的(具体取决于您选择的命令),在此期间,大型机扩展的二进制编码十进制交换码 (EBCDIC) 数据集在复制到 Cloud Storage 存储桶期间会转换为 UTF-8 格式的 ORC。 - 将数据集加载到 BigQuery 表中。
- (可选)对 BigQuery 表执行 SQL 查询。
- (可选)将数据从 BigQuery 导出回大型机。
以下部分将详细介绍如何使用 qsam
命令和 gsutil cp
命令将在大型机上本地转码的数据移至 Google Cloud 。
使用 qsam
命令在本地进行转码
如需使用 qsam
命令在大型主机上本地转码大型主机数据,请按以下步骤操作:
创建一个作业,以读取大型机上的数据集并将其转码为 ORC 格式,如以下命令所示。从 INFILE 数据集读取数据,并从 COPYBOOK DD 读取记录布局。 输入数据集必须是具有固定或可变记录长度的排队顺序存取方法 (QSAM) 文件。
您可以使用
--transcode-configuration
实参提供转码器配置文件,以修改 Mainframe Connector 转码流程的默认行为。//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
用于指定 copybook、输入和转码配置的路径。如需了解其他选项,请参阅DataPath
。如果您想记录此过程中执行的命令,可以启用加载统计信息。
创建并提交一个 BigQuery 加载作业,该作业会将
tablename.orc
中的 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
:您要在其中执行查询的项目的名称。
(可选)创建并提交一个 BigQuery 查询作业,该作业会从 QUERY DD 文件执行 SQL 读取操作。 通常,该查询将是
MERGE
或SELECT INTO DML
语句,用于转换 BigQuery 表。请注意,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
:执行查询的位置。我们建议您在靠近数据的位置执行查询。
(可选)创建并提交导出作业,该作业会从 QUERY DD 文件执行 SQL 读取,并将生成的数据集以二进制文件形式导出到大型机。
您可以使用
--transcode-configuration
实参提供转码器配置文件,以修改 Mainframe Connector 转码流程的默认行为。//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 描述。如需了解 copybook、outfile 和转码配置路径的其他选项,请参阅
DataPath
。
使用 gsutil cp
命令在本地转码
如需使用 gsutil cp
命令在大型机上本地转码大型机数据,请按以下步骤操作:
创建一个作业,以读取大型机上的数据集并将其转码为 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 Connector 支持的环境变量的完整列表,请参阅环境变量。
在此示例中,标准输入 (STDIN) 作为流内数据提供给 STDIN DD。或者,您也可以使用数据源名称 (DSN) 提供此输入,这样可以更轻松地管理符号替换。
如果您想记录此过程中执行的命令,可以启用加载统计信息。
创建并提交一个 BigQuery 加载作业,该作业会将
tablename.orc
中的 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
:您要在其中执行查询的项目的名称。
(可选)创建并提交一个 BigQuery 查询作业,该作业会从 QUERY DD 文件执行 SQL 读取操作。 通常,该查询将是
MERGE
或SELECT INTO DML
语句,用于转换 BigQuery 表。请注意,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
:执行查询的位置。我们建议您在靠近数据的位置执行查询。
(可选)创建并提交导出作业,该作业会从 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 描述。