本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
使用 Pyth ASCII on 将EBCDIC数据转换并解压缩为AWS开启
由路易斯·古斯塔沃·丹塔斯创作 () AWS
代码存储库:大型机数据实用程序 | 环境:PoC 或试点 | 来源:大型机数据 EBCDIC |
目标:分布式或云端现代化数据 ASCII | R 类型:更换平台 | 工作量:IBM |
技术:大型机;数据库;存储和备份;现代化 | AWS服务:亚马逊EBS;亚马逊 EC2 |
Summary
由于大型机通常托管关键业务数据,因此在将数据迁移到 Amazon Web Services (AWS) Cloud 或其他美国信息交换标准规范 () 环境时,实现数据现代化是最重要的任务之一。ASCII在大型机上,数据通常以扩展的二进制编码十进制交换码 () 格式编码。EBCDIC导出数据库、虚拟存储访问方法 (VSAM) 或平面文件通常会生成打包的二进制EBCDIC文件,这些文件迁移起来比较复杂。最常用的数据库迁移解决方案是 change data capture (CDC),在大多数情况下,它会自动转换数据编码。但是,这些数据库VSAM、或平面文件可能没有可用的CDC机制。对于此文件,需要另一种方法来实现数据现代化。
此模式描述了如何通过将EBCDIC数据转换为ASCII格式来实现数据的现代化。转换后,您可将数据加载至分布式数据库中,也可以让云中的应用程序直接处理数据。该模式使用mainframe-data-utilities GitHub 存储库中的转换脚本和示例文件。
先决条件和限制
先决条件
限制
产品版本
架构
源技术堆栈
目标技术堆栈
虚拟私有云中的亚马逊弹性计算云 (AmazonEC2) 实例 (VPC)
亚马逊 Elastic Block Store(亚马逊EBS)
Python 及其必需的包、 JavaScript 对象表示法 (JSON)、sys 和日期时间
ASCII平面文件可供现代应用程序读取或加载到关系数据库表中
目标架构
架构图显示了在EC2实例上将ASCII文件转换为文件的过程:EBCDIC
使用 parse_copybook_to_json.py 脚本,您可以将COBOL抄写本转换为JSON文件。
使用该JSON文件和 extract_ebcdic_to_ascii.py 脚本,可以将EBCDIC数据转换为ASCII文件。
自动化和扩缩
在首次手动文件转换所需资源到位后,您可自动进行文件转换。此示例不包括自动化说明。有多种方法可自动转换。下文概述了一种可能使用的方法:
AWS服务
其他工具
代码存储库
此模式的代码可在mainframe-data-utilities GitHub 存储库中找到。
操作说明
任务 | 描述 | 所需技能 |
---|
启动 EC2 实例。 | 该EC2实例必须具有出站互联网访问权限。这允许实例访问上可用的 Python 源代码 GitHub。创建实例: | 将军 AWS |
安装 Git。 | 使用安全 shell (SSH) 客户端,连接到您刚刚启动的EC2实例。有关更多信息,请参阅连接到您的 Linux 实例。 在 Amazon EC2 控制台中,运行以下命令。这会在EC2实例上安装 Git。 sudo yum install git
运行以下命令并确认 Git 已成功安装。 git --version
| 通用AWS,Linux |
安装 Python。 | 在 Amazon EC2 控制台中,运行以下命令。这将在EC2实例上安装 Python。 sudo yum install python3
在 Amazon EC2 控制台中,运行以下命令。这会在EC2实例上安装 Pip3。 sudo yum install python3-pip
在 Amazon EC2 控制台中,运行以下命令。这会在 Python (Boto3) 上安装AWSSDK到实例上。EC2 sudo pip3 install boto3
在 Amazon EC2 控制台中,运行以下命令,其中<us-east-1> 是您所在AWS地区的代码。有关区域代码的完整列表,请参阅 Amazon EC2 文档中的可用区域。 export AWS_DEFAULT_REGION=<us-east-1>
| 通用AWS,Linux |
克隆 GitHub 存储库。 | 在 Amazon EC2 控制台中,运行以下命令。这将从中克隆mainframe-data-utilities存储库 GitHub 并打开默认的副本位置,即home 文件夹。 git clone https://github.com/aws-samples/mainframe-data-utilities.git
在 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布局文件。 | 导航到 parse_copybook_to_json.py 脚本中定义的输出路径。 检查 sample-data/cobpack2-list.json 文件的创建时间,以确认您选择了相应的布局文件。JSON 检查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布局文件最重要的属性是: 有关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 文件。 | 检查 extract-ebcdic-to-ascii/的创建时间COBPACK。 ASCII.txt 文件以验证它是否是最近创建的。 在 Amazon EC2 控制台中,输入以下命令。这将打开ASCII文件的第一条记录。 head sample-data/COBPACK.ASCII.txt -n 1| xxd
检查第一条记录内容。由于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 |
相关资源
参考
教程