Convert SSIS packages to Snowflake SQL

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 →
Why Snowflake

SSIS wasn't built for cloud-native data warehousing

Data Flow transforms → Snowflake SQL pipelines

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.

Bulk inserts → 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 scheduling → Snowflake Tasks

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.

Parser output

SSIS Data Flow to Snowflake SQL

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.

SSIS Data Flow (.dtsx)
<!-- 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)
MigryX
converts
Snowflake SQL
-- 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.

Coverage

SSIS to Snowflake -- artifact mapping

SSIS Component Snowflake Equivalent Notes
OLE DB SourceSELECT / External StageSQL Server queries become Snowflake SQL or staged file reads
Derived ColumnCASE WHEN / SQL expressionsSSIS expressions mapped to Snowflake SQL syntax
Conditional SplitCASE WHEN + filtered CTEsMultiple outputs become branched SQL logic
LookupJOINFull match and no-match outputs preserved via LEFT JOIN
Merge JoinJOINInner, left, full outer join types supported
AggregateGROUP BY with aggregatesSUM, COUNT, AVG, MIN, MAX preserved
SortORDER BYMulti-column sort with ASC/DESC preserved
OLE DB DestinationCOPY INTO / MERGEBulk loads via COPY INTO, upserts via MERGE
Execute SQL TaskSnowflake Stored ProcedureT-SQL translated to Snowflake SQL dialect
Script Task (C#/VB.NET)Snowflake Stored Procedure / Python UDFCustom logic rewritten as SQL or Snowpark
For/Foreach LoopSnowflake Task DAGLoop containers become task chains or procedures
SSISDB CatalogSnowflake Tasks + StreamsScheduling, parameters, and CDC modernized natively
Validation

Every conversion validated to row-level parity

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 modernized
5X
Faster processing
$2.8M
Savings over 3 years
380
Data Flows converted

Manufacturing Company: SSIS to Snowflake in 9 Months

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 →

See it on your own SSIS packages

Upload an SSIS package (.dtsx). Get parsed lineage, Snowflake SQL code, and a validation report.

Book a Live Demo → hello@migryx.com