NEW Qlik to dbt AI Proof Pricing Book a demo Scan your code free

Hard sources — not covered by free tools

Also parsed — certify what free tools miss

Targets

Warehouses

Runtimes

After migration

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.

Architecture

SSIS in. Snowflake out.

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

SSIS
Data flow.dtsx
Control flowTasks + precedence
ExpressionsSSIS syntax
Conn. managers.ispac projects
MigryX Parser
Deterministic parseAI where it helps
Row-level parityBefore cutover
SQL emitSet-based procedures
Snowpark emitWhere SQL is not enough
Snowflake
Snowflake SQLDDL from schemas
SnowparkPython DataFrames
TasksReplaces scheduler
StreamsChange data
Git + cloneDev -> prod
RBAC + tagsColumn security

MigryX 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.

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.

See how Data Matching works →
23
engagements
28
regulated enterprises

Proven with regulated enterprises

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 →

What to bring to a SSIS assessment

Review a representative sample with us →