Hard sources — not covered by free tools
Also parsed — certify what free tools miss
Runtimes
After migration
SSIS packages (.dtsx) and project archives (.ispac) parsed structurally. Data Flows converted to Snowflake SQL pipelines with COPY INTO, Streams, and Tasks. Full lineage, validated parity.
Deterministic parsers read the estate and emit native Snowflake code — not .dtsx packages lifted into a managed SSIS runtime.
SSIS → MigryX parser → SQL + Snowpark + Tasks
Deterministic parseAI where it helpsMigryX AI handles the logic parsers cannot resolve alone, and every change it makes goes through the same parity checks. It runs on a model you approve, air-gapped if your estate requires it.
OLE DB Source, Derived Column, Lookup, and Aggregate transforms run on a single SSIS server. Snowflake pushes the same logic into its massively parallel SQL engine. Bulk loads that took hours via OLE DB Destination finish in minutes with COPY INTO.
SSIS bulk inserts via OLE DB Destination or SQL Server Destination are tightly coupled to SQL Server. Snowflake's COPY INTO ingests from S3, Azure Blob, and GCS with automatic compression, schema detection, and parallel loading -- no driver dependencies.
SSISDB Catalog and SQL Agent jobs require on-premise infrastructure and manual monitoring. Snowflake Tasks and Streams provide serverless scheduling with change data capture, automatic retry, and DAG-based orchestration natively in the cloud.
A typical SSIS Data Flow with OLE DB Source, Derived Column, Lookup, and OLE DB Destination -- converted to Snowflake SQL using MERGE, Streams, and Tasks for incremental processing.
<!-- Package: Order_ETL.dtsx -->
<!-- Data Flow Task: Load Orders -->
OLE DB Source: [dbo].[STG_ORDERS]
SELECT OrderID, CustomerID, Amount,
OrderDate, Status
FROM STG_ORDERS
WHERE Status IN ('NEW','UPDATED')
Derived Column: [OrderTier]
(DT_WSTR,10)(
Amount > 10000 ? "Enterprise" :
Amount > 1000 ? "Business" :
"Standard"
)
Lookup: [DIM_CUSTOMERS]
JOIN ON CustomerID = CustID
OUTPUT: CustomerName, Segment
OLE DB Destination: [dbo].[FACT_ORDERS]
INSERT INTO FACT_ORDERS
(OrderID, CustomerName, Segment,
OrderTier, Amount, OrderDate)
-- SSIS Data Flow → Snowflake SQL
-- Stream captures incremental changes
CREATE OR REPLACE STREAM stg_orders_stream
ON TABLE stg_orders;
-- MERGE replaces full Data Flow pipeline
MERGE INTO fact_orders tgt
USING (
SELECT
s.OrderID,
c.CustomerName,
c.Segment,
CASE
WHEN s.Amount > 10000 THEN 'Enterprise'
WHEN s.Amount > 1000 THEN 'Business'
ELSE 'Standard'
END AS OrderTier,
s.Amount,
s.OrderDate
FROM stg_orders_stream s
LEFT JOIN dim_customers c
ON s.CustomerID = c.CustID
WHERE s.Status IN ('NEW','UPDATED')
) src
ON tgt.OrderID = src.OrderID
WHEN MATCHED THEN UPDATE SET
tgt.CustomerName = src.CustomerName,
tgt.OrderTier = src.OrderTier,
tgt.Amount = src.Amount
WHEN NOT MATCHED THEN INSERT VALUES (
src.OrderID, src.CustomerName,
src.Segment, src.OrderTier,
src.Amount, src.OrderDate
);
-- Task replaces SSIS scheduling
CREATE OR REPLACE TASK load_orders_task
WAREHOUSE = ETL_WH
SCHEDULE = 'USING CRON 0 */2 * * * UTC'
WHEN SYSTEM$STREAM_HAS_DATA('stg_orders_stream')
AS EXECUTE IMMEDIATE 'CALL sp_load_orders()';
OLE DB Source, Derived Column, Lookup, and Destination replaced by a single Snowflake MERGE statement. Streams capture incremental changes. Tasks replace SSISDB scheduling.
| SSIS Component | Snowflake Equivalent | Notes |
|---|---|---|
| OLE DB Source | SELECT / External Stage | SQL Server queries become Snowflake SQL or staged file reads |
| Derived Column | CASE WHEN / SQL expressions | SSIS expressions mapped to Snowflake SQL syntax |
| Conditional Split | CASE WHEN + filtered CTEs | Multiple outputs become branched SQL logic |
| Lookup | JOIN | Full match and no-match outputs preserved via LEFT JOIN |
| Merge Join | JOIN | Inner, left, full outer join types supported |
| Aggregate | GROUP BY with aggregates | SUM, COUNT, AVG, MIN, MAX preserved |
| Sort | ORDER BY | Multi-column sort with ASC/DESC preserved |
| OLE DB Destination | COPY INTO / MERGE | Bulk loads via COPY INTO, upserts via MERGE |
| Execute SQL Task | Snowflake Stored Procedure | T-SQL translated to Snowflake SQL dialect |
| Script Task (C#/VB.NET) | Snowflake Stored Procedure / Python UDF | Custom logic rewritten as SQL or Snowpark |
| For/Foreach Loop | Snowflake Task DAG | Loop containers become task chains or procedures |
| SSISDB Catalog | Snowflake Tasks + Streams | Scheduling, parameters, and CDC modernized natively |
Data Matching compares SSIS package output against Snowflake output -- row by row, column by column.
See how Data Matching works →28 regulated enterprises, including six global systemically important banks, have modernized with MigryX. Customer names are shared under NDA in a demo, with reference calls on request.
See all engagements →