使用 Pyth ASCII on 将EBCDIC数据转换并解压缩为AWS开启 - AWS Prescriptive Guidance

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

使用 Pyth ASCII on 将EBCDIC数据转换并解压缩为AWS开启

由路易斯·古斯塔沃·丹塔斯创作 () AWS

摘要

由于大型机通常托管关键业务数据,因此在将数据迁移到 Amazon Web Services (AWS) Cloud 或其他美国信息交换标准规范 () 环境时,实现数据现代化是最重要的任务之一。ASCII在大型机上,数据通常以扩展的二进制编码十进制交换码 () 格式编码。EBCDIC导出数据库、虚拟存储访问方法 (VSAM) 或平面文件通常会生成打包的二进制EBCDIC文件,这些文件迁移起来比较复杂。最常用的数据库迁移解决方案是 change data capture (CDC),在大多数情况下,它会自动转换数据编码。但是,这些数据库VSAM、或平面文件可能没有可用的CDC机制。对于此文件,需要另一种方法来实现数据现代化。

此模式描述了如何通过将EBCDIC数据转换为ASCII格式来实现数据的现代化。转换后,您可将数据加载至分布式数据库中,也可以让云中的应用程序直接处理数据。该模式使用mainframe-data-utilities GitHub 存储库中的转换脚本和示例文件。

先决条件和限制

先决条件

限制

  • 不支持在COBOL程序内部定义的文件布局。它们必须单独提供。

产品版本

  • Python 版本 3.8 或更高版本。

架构

源技术堆栈

  • EBCDIC大型机上的数据

  • COBOL字帖

目标技术堆栈

  • 虚拟私有云中的亚马逊弹性计算云 (AmazonEC2) 实例 (VPC)

  • 亚马逊 Elastic Block Store(亚马逊EBS)

  • Python 及其必需的包、 JavaScript 对象表示法 (JSON)、sys 和日期时间

  • ASCII平面文件可供现代应用程序读取或加载到关系数据库表中

目标架构

EBCDIC使用 Python 脚本和COBOL抄写本将数据转换为EC2实例ASCII上

架构图显示了在EC2实例上将ASCII文件转换为文件的过程:EBCDIC

  1. 使用 parse_copybook_to_json.py 脚本,您可以将COBOL抄写本转换为JSON文件。

  2. 使用该JSON文件和 extract_ebcdic_to_ascii.py 脚本,可以将EBCDIC数据转换为ASCII文件。

自动化和扩缩

在首次手动文件转换所需资源到位后,您可自动进行文件转换。此示例不包括自动化说明。有多种方法可自动转换。下文概述了一种可能使用的方法:

  1. 将AWS命令行接口 (AWSCLI) 和 Python 脚本命令封装到外壳脚本中。

  2. 创建一个 AWS Lambda 函数,以异步方式将 shell 脚本任务提交到实例。EC2有关更多信息,请参阅使用 AWS Lambda 安排SSH作业

  3. 创建 Amazon Simple Storage Service (Amazon S3) 触发器,该触发器在每次上传旧文件时调用 Lambda 函数。有关更多信息,请参见使用 Amazon S3 触发器调用 Lambda函数

工具

AWS 服务

其他工具

  • GitHub是一项代码托管服务,提供协作工具和版本控制。

  • Python 是高级编程语言。

代码存储库

此模式的代码可在mainframe-data-utilities GitHub 存储库中找到。

操作说明

任务描述所需技能

启动 EC2 实例。

EC2实例必须具有出站互联网访问权限。这允许实例访问上可用的 Python 源代码 GitHub。创建实例:

  1. https://console.aws.amazon.com/ec2 上打开亚马逊EC2控制台。

  2. 启动一个 EC2 Linux 实例。使用公有 IP 地址,允许通过端口 22 进行入站访问。确保实例的存储大小至少为EBCDIC数据文件大小的两倍。有关说明,请参阅 Amazon EC2 文档

将军 AWS

安装 Git。

  1. 使用安全 shell (SSH) 客户端,连接到您刚刚启动的EC2实例。有关更多信息,请参阅连接到您的 Linux 实例

  2. 在 Amazon EC2 控制台中,运行以下命令。这会在EC2实例上安装 Git。

    sudo yum install git
  3. 运行以下命令并确认 Git 已成功安装。

    git --version
通用AWS,Linux

安装 Python。

  1. 在 Amazon EC2 控制台中,运行以下命令。这将在EC2实例上安装 Python。

    sudo yum install python3
  2. 在 Amazon EC2 控制台中,运行以下命令。这会在EC2实例上安装 Pip3。

    sudo yum install python3-pip
  3. 在 Amazon EC2 控制台中,运行以下命令。这将在实例上AWSSDK为 Python (Boto3) 安装。EC2

    sudo pip3 install boto3
  4. 在 Amazon EC2 控制台中,运行以下命令,其中<us-east-1>是您所在AWS地区的代码。有关区域代码的完整列表,请参阅 Amazon EC2 文档中的可用区域

    export AWS_DEFAULT_REGION=<us-east-1>
通用AWS,Linux

克隆 GitHub 存储库。

  1. 在 Amazon EC2 控制台中,运行以下命令。这将从中克隆mainframe-data-utilities存储库 GitHub 并打开默认的副本位置,即home文件夹。

    git clone https://github.com/aws-samples/mainframe-data-utilities.git
  2. home 文件夹,确认该 mainframe-data-utilities 文件夹存在。

将军AWS, GitHub
任务描述所需技能

将COBOL字帖解析到JSON布局文件中。

mainframe-data-utilities 文件夹中,运行 parse_copybook_to_json.py 脚本。该自动化模块从COBOL抄本中读取文件布局并创建JSON文件。该JSON文件包含解释和提取源文件中的数据所需的信息。这将从COBOL副本中创建JSON元数据。

以下命令将COBOL副本转换为JSON文件。

python3 parse_copybook_to_json.py \ -copybook LegacyReference/COBPACK2.cpy \ -output sample-data/cobpack2-list.json \ -dict sample-data/cobpack2-dict.json \ -ebcdic sample-data/COBPACK.OUTFILE.txt \ -ascii sample-data/COBPACK.ASCII.txt \ -print 10000

该脚本打印所接收到的参数。

----------------------------------------------------------------------- Copybook file...............| LegacyReference/COBPACK2.cpy Parsed copybook (JSON List).| sample-data/cobpack2-list.json JSON Dict (documentation)...| sample-data/cobpack2-dict.json ASCII file..................| sample-data/COBPACK.ASCII.txt EBCDIC file.................| sample-data/COBPACK.OUTFILE.txt Print each..................| 10000 -----------------------------------------------------------------------

有关参数的更多信息,请参阅 GitHub 存储库中的README文件

通用AWS,Linux

检查JSON布局文件。

  1. 导航到 parse_copybook_to_json.py 脚本中定义的输出路径。

  2. 检查 sample-data/cobpack2-list.json 文件的创建时间,以确认您选择了相应的布局文件。JSON

  3. 检查JSON文件并确认其内容是否与以下内容相似。

"input": "extract-ebcdic-to-ascii/COBPACK.OUTFILE.txt", "output": "extract-ebcdic-to-ascii/COBPACK.ASCII.txt", "max": 0, "skip": 0, "print": 10000, "lrecl": 150, "rem-low-values": true, "separator": "|", "transf": [ { "type": "ch", "bytes": 19, "name": "OUTFILE-TEXT" }

JSON布局文件最重要的属性是:

  • input— 包含要转换的EBCDIC文件的路径

  • output— 定义生成ASCII文件的路径

  • lrecl — 指定逻辑记录长度的大小(以字节为单位)

  • transf — 列出所有字段及其大小(以字节为单位)

有关JSON布局文件的更多信息,请参阅 GitHub 存储库中的README文件

将军AWS,JSON

创建 ASCII 文件。

运行 extract_ebcdic_to_ascii.py 脚本,该脚本包含在克隆的 GitHub 存储库中。此脚本读取EBCDIC文件并写入转换后且可读的ASCII文件。

python3 extract_ebcdic_to_ascii.py -local-json sample-data/cobpack2-list.json

当脚本处理EBCDIC数据时,它会为每批 10,000 条记录打印一条消息。请参阅以下示例。

------------------------------------------------------------------ 2023-05-15 21:21:46.322253 | Local Json file | -local-json | sample-data/cobpack2-list.json 2023-05-15 21:21:47.034556 | Records processed | 10000 2023-05-15 21:21:47.736434 | Records processed | 20000 2023-05-15 21:21:48.441696 | Records processed | 30000 2023-05-15 21:21:49.173781 | Records processed | 40000 2023-05-15 21:21:49.874779 | Records processed | 50000 2023-05-15 21:21:50.705873 | Records processed | 60000 2023-05-15 21:21:51.609335 | Records processed | 70000 2023-05-15 21:21:52.292989 | Records processed | 80000 2023-05-15 21:21:52.938366 | Records processed | 89280 2023-05-15 21:21:52.938448 Seconds 6.616232

有关如何更改打印频率的信息,请参阅 GitHub 存储库中的README文件

将军 AWS

检查 ASCII 文件。

  1. 检查 extract-ebcdic-to-ascii/的创建时间COBPACK。 ASCII.txt 文件以验证它是否是最近创建的。

  2. 在 Amazon EC2 控制台中,输入以下命令。这将打开ASCII文件的第一条记录。

    head sample-data/COBPACK.ASCII.txt -n 1| xxd
  3. 检查第一条记录内容。由于EBCDIC文件通常是二进制文件,因此它们没有回车符和换行符 (CRLF) 特殊字符。extract_ebcdic_to_ascii.py 脚本添加了竖线字符作为列分隔符,该分隔符在脚本参数中定义。

如果您使用了提供的示例EBCDIC文件,则以下是该ASCII文件中的第一条记录。

00000000: 2d30 3030 3030 3030 3030 3130 3030 3030 -000000000100000 00000010: 3030 307c 3030 3030 3030 3030 3031 3030 000|000000000100 00000020: 3030 3030 3030 7c2d 3030 3030 3030 3030 000000|-00000000 00000030: 3031 3030 3030 3030 3030 7c30 7c30 7c31 0100000000|0|0|1 00000040: 3030 3030 3030 3030 7c2d 3130 3030 3030 00000000|-100000 00000050: 3030 307c 3130 3030 3030 3030 307c 2d31 000|100000000|-1 00000060: 3030 3030 3030 3030 7c30 3030 3030 7c30 00000000|00000|0 00000070: 3030 3030 7c31 3030 3030 3030 3030 7c2d 0000|100000000|- 00000080: 3130 3030 3030 3030 307c 3030 3030 3030 100000000|000000 00000090: 3030 3030 3130 3030 3030 3030 307c 2d30 0000100000000|-0 000000a0: 3030 3030 3030 3030 3031 3030 3030 3030 0000000001000000 000000b0: 3030 7c41 7c41 7c0a 00|A|A|.
通用AWS,Linux

评估EBCDIC文件。

在 Amazon EC2 控制台中,输入以下命令。这将打开EBCDIC文件的第一条记录。

head sample-data/COBPACK.OUTFILE.txt -c 150 | xxd

如果您使用了示例EBCDIC文件,则结果如下。

00000000: 60f0 f0f0 f0f0 f0f0 f0f0 f1f0 f0f0 f0f0 `............... 00000010: f0f0 f0f0 f0f0 f0f0 f0f0 f0f0 f1f0 f0f0 ................ 00000020: f0f0 f0f0 f0f0 f0f0 f0f0 f0f0 f0f0 f1f0 ................ 00000030: f0f0 f0f0 f0f0 d000 0000 0005 f5e1 00fa ................ 00000040: 0a1f 0000 0000 0005 f5e1 00ff ffff fffa ................ 00000050: 0a1f 0000 000f 0000 0c10 0000 000f 1000 ................ 00000060: 0000 0d00 0000 0000 1000 0000 0f00 0000 ................ 00000070: 0000 1000 0000 0dc1 c100 0000 0000 0000 ................ 00000080: 0000 0000 0000 0000 0000 0000 0000 0000 ................ 00000090: 0000 0000 0000 ......

要评估源文件和目标文件之间的等效性,需要全面EBCDIC的知识。例如,示例EBCDIC文件的第一个字符是连字符 () -。在EBCDIC文件的十六进制表示法中,此字符由表示60,在ASCII文件的十六进制表示法中,该字符由表示。2D有关 EBCDIC-to-ASCII转换表 EBCDIC,请参阅IBM网站ASCII上的内容。

通用AWS、Linux、EBCDIC

相关资源

参考

教程