Databricks Atlas Case Studies Pricing Start a pilot

Hard sources — not covered by free tools

Also parsed — certify what free tools miss

Campaign

Warehouses

Runtimes

US Card Issuer Converts 3,800 COBOL Batch Programs and 6.2 Million Lines to Databricks — Copybooks, JCL, and COMP-3 Included

MigryX Case Study • May 2026 • Payments & Card Issuing

Executive Summary

A US card issuer still posted, settled, and extracted general-ledger and BSA files from a z/OS batch estate: 3,800 COBOL programs, 890 copybooks, 1,420 JCL members, VSAM plus DB2, 6.2 million lines counted once. This was not CICS online and it was not a rehost. The bank already ran Databricks for fraud features. Nightly card-posting and collections batch was the thing still buying MIPS. MigryX parsed copybooks into Spark schemas (COMP-3, REDEFINES, OCCURS), rewrote PROCEDURE DIVISION as PySpark DataFrames — not record loops — and turned JCL EXEC/DD/PROC graphs into Databricks Workflows. Twenty-two months. Dual-run through two quarter-ends. The LPAR that existed for this batch is gone. Three-year gap versus MIPS + OEM tools: $11.4 million.

Client Overview

Issuing, collections, and finance ops grew up on the mainframe because that is where the card system of record lived. Authorization is a different stack. This program was the overnight work: post presentments, age delinquencies, cut GL, feed BSA, produce investor tapes. Analysts who joined after 2018 expected Python. The people who could change a copybook were retiring on a calendar, not a slogan.

Databricks was already paid for. Putting COBOL batch on a second warehouse would have been a second security model. The constraint was: same Unity Catalog the fraud team uses, same AWS account, no “COBOL in a container on Linux” story.

Business Challenge

The MigryX Approach

Inventory hashed every program, copybook, and JCL member. Copybooks were parsed first — the schema catalog — then programs were bound to those layouts. JCL was a second graph: EXEC steps, DD datasets, COND, and PROC expansion. Control-M edges that disagreed with JCL (47 jobs) were written down, not guessed.

The COBOL emitter prefers DataFrame expressions over rdd.map. PERFORM UNTIL END-OF-FILE becomes a file read. Arithmetic on COMP-3 becomes decimal columns. Sequential updates that really are state machines (71 collections programs that walk an account history in date order) stayed as explicit window/order operations with a comment, not as “Spark will figure it out.”

JCL became Workflow YAML: one task per EXEC, parameters from symbolic overrides, failure matching COND. VSAM dumps landed in bronze Delta with the copybook schema. DB2 extracts used the same catalog names the JCL DD comments already used so ops could find “yesterday’s POST.MAST” without a decoder.

Target Architecture

z/OS batch → MigryX → Databricks on AWS (fraud lakehouse tenant)

z/OSz/OS batch
COBOLCOBOL3,800 programs
CopybooksCopybooks890 · COMP-3 / REDEFINES
JCLJCL + PROCs1,420 members
VSAM / DB2VSAM + DB2Files + tables
MigryXMigryX
Copybook parserCopybook → schemaStructType + decimals
PySpark emitPySpark emitNo record loops
JCL graphJCL graphEXEC / DD / PROC
DatabricksDatabricks · AWS
PySparkPySpark jobsPost / collect / GL
DeltaDelta / S3VSAM + DB2 landing
WorkflowsWorkflowsJCL successors
Unity CatalogUnity CatalogSame as fraud
AWSKMS + IAMPAN tokenize
GitGitProgram = version

Authorization stayed on the switch. This diagram is overnight batch only. A Workflow that claims to “replace CICS” is not this program.

Estate Inventory and Cutover Waves

DomainProgramsLOCHard partsWave
Card posting / presentment9801.6MCOMP-3, VSAM keys1–2
Collections / recovery6201.1MOrdered account walks2–3
GL / settlement7401.3MDual-run 2 closes3
BSA / investor tapes5100.9MOutput schema lock4
Shared utilities9501.3MCalled from all wavesAll

6.2M LOC is COBOL + copybooks counted once. JCL is not counted as “code.” 1,420 JCL members are the scheduler surface, not a second 6 million lines.

01CopybooksSchema catalog before any program
02ProgramsDataFrame emit, 88s on the right overlay
03JCLWorkflow tasks + COND
04ParityPacked-decimal hashes, not string compares
05CutTwo quarter-ends, then LPAR drop

What we will not claim

Results

3,800
COBOL programs
6.2M
Lines (copybooks once)
1,420
JCL members → Workflows
$11.4M
3-year MIPS + LPAR gap
22 mo
Inventory through LPAR off
81%
No human rewrite
"We did not want COBOL running in a Linux box with a fake JES. We wanted the posting file to be a Delta table our fraud team already knew how to grant. The copybook parser was the whole game. Everything else is a Workflow."

— Head of Batch Engineering, US card issuer

Mainframe batch, Databricks runtime

Copybooks, JCL, VSAM, DB2 — parsed, not rehosted. PySpark DataFrames and Workflows, same Unity Catalog you already run.

Explore COBOL to Databricks →

Explore other modernizations

Targets: Snowflake Databricks Google Cloud Azure AWS PySpark Polars Iceberg DBT SQLMesh
Sources: SAS Alteryx Talend Qlik DataStage Informatica COBOL Oracle Teradata SSIS