Start here →

Convert SAS programs to Iceberg tables

SAS datasets, DATA step, and PROC SQL parsed structurally. Emitted as Iceberg tables plus the Spark or Trino SQL that writes them.

Architecture

SAS in. Iceberg out.

Deterministic parsers read the SAS estate and emit native Iceberg code — not a proprietary lakehouse lock-in.

SAS programs → SAS2PY parser → Iceberg tables

SAS
Base SAS DATA step / macros
DI Studio Jobs + mappings
EG / EM Projects + flows
Viya / CAS CASL + actions
SAS2PY Parser
Deterministic parse AI optional
Row-level parity Before cutover
Table emit Create + write
Job emit Spark or Trino
Iceberg
Iceberg Open tables
Spark / Trino Your engine
Object store S3 / ADLS / GCS
Git DDL in review

AI is an optional add-on, off by default — the conversion runs end to end without it, air-gapped if your estate requires it.

Why Iceberg

The table format should outlive the engine

SAS datasets are a private format

Iceberg is an open spec. Spark, Trino, Flink, and Snowflake can all read what we write.

IMAGE copies are not time travel

Iceberg snapshots replace six generations of SAS backup datasets.

A dump to Parquet is not a modernization

The DATA step has to become SQL or Spark. The table format is the contract.

Parser output

SAS dataset to an Iceberg table

A SAS DATA step write — emitted as an Iceberg CREATE + INSERT.

SAS
/* SAS */
data dw.gold;
  set dw.txn;
  if amount > 1000;
run;
SAS2PY
converts
Spark + Iceberg
# SAS dataset → Iceberg
(spark.table("txn")
      .filter("amount > 1000")
      .writeTo("dw.gold")
      .using("iceberg")
      .createOrReplace())

The SAS library becomes a catalog namespace. Snapshots replace IMAGE copies.

Coverage

SAS to Iceberg — artifact mapping

SASIcebergNotes
SAS datasetIceberg tableOpen format
DATA step / SQLSpark or Trino SQLEngine of your choice
IMAGE copiesSnapshotsTime travel
SAS indexesPartition specsPruning
Validation

Every conversion validated to row-level parity

SAS output compared to Iceberg output — row by row, column by column. Differences flagged before sign-off.

See how Data Matching works →
6,400
jobs
5.4M
LOC
$9.2M
saved
3
catalogs

Manufacturer: 6,400 SAS jobs to Iceberg on three clouds

Three SAS Grids, one Iceberg spec: Glue+S3, ADLS+Hive Metastore, BigLake+Dataproc. Same modules, three catalog adapters.

Read the case study →