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.
Upload a package, get converted code →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. In the case study below, all ETL pipelines were validated against SQL Server production baselines with full regression testing.
See how Data Matching works →1,800 SSIS packages converted to Snowflake SQL. 380 Data Flow pipelines with OLE DB, Lookup, and Derived Column transforms replaced by Snowflake MERGE and COPY INTO. SSISDB Catalog scheduling modernized to Snowflake Tasks with Stream-based CDC. SQL Server infrastructure decommissioned within 60 days.
Read the full case study →Upload an SSIS package (.dtsx). Get parsed lineage, Snowflake SQL code, and a validation report.