Start here →
SAS datasets, DATA step, and PROC SQL parsed structurally. Emitted as Iceberg tables plus the Spark or Trino SQL that writes them.
Deterministic parsers read the SAS estate and emit native Iceberg code — not a proprietary lakehouse lock-in.
SAS programs → SAS2PY parser → Iceberg tables
SAS2PY Parser
Deterministic parse
AI optional
AI is an optional add-on, off by default — the conversion runs end to end without it, air-gapped if your estate requires it.
Iceberg is an open spec. Spark, Trino, Flink, and Snowflake can all read what we write.
Iceberg snapshots replace six generations of SAS backup datasets.
The DATA step has to become SQL or Spark. The table format is the contract.
A SAS DATA step write — emitted as an Iceberg CREATE + INSERT.
/* SAS */ data dw.gold; set dw.txn; if amount > 1000; run;
# 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.
| SAS | Iceberg | Notes |
|---|---|---|
| SAS dataset | Iceberg table | Open format |
| DATA step / SQL | Spark or Trino SQL | Engine of your choice |
| IMAGE copies | Snapshots | Time travel |
| SAS indexes | Partition specs | Pruning |
SAS output compared to Iceberg output — row by row, column by column. Differences flagged before sign-off.
See how Data Matching works →Three SAS Grids, one Iceberg spec: Glue+S3, ADLS+Hive Metastore, BigLake+Dataproc. Same modules, three catalog adapters.
Read the case study →