SnowConvert AI - SSIS

This section provides a comprehensive reference of SSIS elements and components that SnowConvert can convert to dbt and Snowflake. Control Flow elements (tasks and containers) become orchestration logic, while Data Flow components (sources, transformations, destinations) become dbt models.

Control Flow Elements

These SSIS Control Flow tasks and containers are supported:

Element

Category

Conversion Target

Notes

Microsoft.Pipeline (Data Flow Task) (https://learn.microsoft.com/en-us/sql/integration-services/data-flow/data-flow?view=sql-server-ver17)

Task

Complete dbt Project

-

Microsoft.ExecuteSQLTask (https://learn.microsoft.com/en-us/sql/integration-services/control-flow/execute-sql-task?view=sql-server-ver17)

Task

Inline SQL or Stored Procedure

-

Microsoft.ExecutePackageTask (https://learn.microsoft.com/en-us/sql/integration-services/control-flow/execute-package-task?view=sql-server-ver17)

Task

Inline EXECUTE TASK or PROCEDURE call

-

STOCK:SEQUENCE (Sequence Container) (https://learn.microsoft.com/en-us/sql/integration-services/control-flow/sequence-container?view=sql-server-ver17)

Container

Inline sequential execution

-

STOCK:FORLOOP (For Loop Container) (https://learn.microsoft.com/en-us/sql/integration-services/control-flow/for-loop-container?view=sql-server-ver17)

Container

Sequential execution

Manual iteration logic required; Check EWI SSC-EWI-SSIS0004 for more information

STOCK:FOREACHLOOP (ForEach Loop Container) (https://learn.microsoft.com/en-us/sql/integration-services/control-flow/foreach-loop-container?view=sql-server-ver17)

Container

LIST/CURSOR pattern

Requires stage mapping; Check EWI SSC-EWI-SSIS0014 for more information

Event Handlers (https://learn.microsoft.com/en-us/sql/integration-services/integration-services-ssis-event-handlers?view=sql-server-ver17)

Container

Not converted

Implement manually using Snowflake exception handling

Note: Unlisted Control Flow elements generate EWI SSC-EWI-SSIS0004.

Container Conversion Details

SSIS containers (Sequence, For Loop, ForEach, Event Handlers) are converted using an inline approach where container logic is expanded within the parent TASK or procedure rather than creating separate procedures.

Sequence Containers

Sequence containers (https://learn.microsoft.com/en-us/sql/integration-services/control-flow/sequence-container?view=sql-server-ver17) are converted inline within the parent TASK. The container’s boundaries are marked with comments in the generated code, and all tasks within the container execute sequentially in the same TASK scope.

Conversion characteristics:

  • No separate procedure or TASK is created for the container

  • Container boundaries are clearly marked BEGIN … END blocks

  • All tasks execute sequentially within the parent TASK

  • Task execution order based on precedence constraints is maintained

  • Limitation: Only “Success” precedence constraints are fully supported. Conditional execution based on task outcomes (Failure or Completion constraints) is not currently implemented and will require manual post-migration adjustments

Behavioral differences:

  • FDM generated: SSC-FDM-SSIS0003

  • Variable scoping differs from SSIS: Container variables are accessible throughout the entire parent TASK, not just within the container scope

Example:

-- BEGIN Sequence Container: MySequence
-- Task 1 within sequence
EXECUTE DBT PROJECT public.DataFlow1 ARGS='build --target dev';
-- Task 2 within sequence  
EXECUTE DBT PROJECT public.DataFlow2 ARGS='build --target dev';
-- END Sequence Container: MySequence
Copy

For Loop Containers

For Loop containers (https://learn.microsoft.com/en-us/sql/integration-services/control-flow/for-loop-container?view=sql-server-ver17) are converted to sequential execution of their contained tasks. However, the loop iteration logic itself requires manual implementation.

Conversion limitations:

  • The container executes once by default (iteration logic not automatically converted)

  • InitExpression, EvalExpression, and AssignExpression require manual conversion

  • An EWI (SSC-EWI-SSIS0004) is generated to indicate manual work is needed

Required manual steps:

  1. Review EvalExpression to understand the loop termination condition

  2. Implement the iteration using Snowflake’s WHILE loop construct

  3. Update AssignExpression logic for proper loop counter management

ForEach Loop Containers

File Enumerator (Supported)

ForEach File Enumerator containers (https://learn.microsoft.com/en-us/sql/integration-services/control-flow/foreach-loop-container?view=sql-server-ver17) are converted to Snowflake stage operations using the LIST command and cursor pattern:

-- List files from Snowflake stage
LIST @<STAGE_PLACEHOLDER>/FolderPath PATTERN = '.*/file_pattern\.csv';

-- Create cursor for iteration
LET file_cursor CURSOR FOR
   SELECT REGEXP_SUBSTR($1, '[^/]+$') AS FILE_VALUE
   FROM TABLE(RESULT_SCAN(LAST_QUERY_ID()))
   WHERE $1 NOT LIKE '%FolderPath/%/%';

-- Iterate through files
FOR file_row IN file_cursor DO
   User_CurrentFileName := :file_row.FILE_VALUE;
   EXECUTE DBT PROJECT public.My_DataFlow_Project ARGS='build --target dev';
END FOR;
Copy

Configuration requirements:

After migration, you’ll need to:

  • Replace <STAGE_PLACEHOLDER> with your actual Snowflake stage name

  • Ensure the folder path is correctly mapped to a Snowflake stage

  • Verify that files are properly staged in Snowflake

An EWI (SSC-EWI-SSIS0014) is generated to remind you of this manual configuration step.

Other Enumerator Types

Other ForEach enumerator types (ForEach Item, ForEach ADO, ForEach NodeList, etc.) aren’t currently supported. SnowConvert generates an EWI (SSC-EWI-SSIS0004) for these cases. Consider implementing the equivalent logic using Snowflake queries or scripting constructs.

Event Handlers

Event handlers (https://learn.microsoft.com/en-us/sql/integration-services/integration-services-ssis-event-handlers?view=sql-server-ver17) (OnError, OnWarning, OnPreExecute, OnPostExecute, etc.) aren’t supported. EWIs are generated. Implement manually using Snowflake exception handling.

Execute SQL Task

Execute SQL Tasks (https://learn.microsoft.com/en-us/sql/integration-services/control-flow/execute-sql-task?view=sql-server-ver17) are converted as inline SQL statements or separate stored procedures, depending on complexity and result set bindings.

Conversion approach:

  • Simple SQL statements: Converted inline within the parent TASK

  • Complex statements with result sets: May be converted to separate stored procedures

  • Result bindings: Handled where possible; unsupported patterns generate EWI SSC-EWI-SSIS0011

Execute Package Task

Execute Package Tasks (https://learn.microsoft.com/en-us/sql/integration-services/control-flow/execute-package-task?view=sql-server-ver17) are handled differently based on package type:

Package Type

Conversion

Notes

Local (single reference)

Inline execution within parent TASK

Package logic expanded inline

Reusable (2+ references or parameters)

CALL to stored procedure

Enables synchronous execution with parameters; generates FDM SSC-FDM-SSIS0005

External

CALL with path resolution

Generates EWI SSC-EWI-SSIS0008 for manual verification

Asynchronous execution note:

TASK-based Execute Package conversions run asynchronously. For synchronous behavior, packages are converted to stored procedures. See EWI SSC-EWI-SSIS0005.

dbt Project Execution

Within the orchestration code, Data Flow Tasks are executed using Snowflake’s EXECUTE DBT PROJECT command:

EXECUTE DBT PROJECT schema.project_name ARGS='build --target dev'
Copy

Important requirements:

  • The project_name must match the name you used when deploying the dbt project (via CREATE DBT PROJECT or Snowflake Workspace deployment)

  • Arguments passed are standard dbt CLI arguments (like build, run, test)

  • Each execution runs the entire dbt project with all models in dependency order

Deployment:

Before executing dbt projects in orchestration, deploy them using:

  • Snowflake CLI: snow dbt deploy --schema schema_name --database database_name --force package_name

  • Snowflake Workspace: Upload and deploy via UI

For complete deployment instructions, see the user guide.

Data Flow Components

These SSIS Data Flow sources, transformations, and destinations are supported:

Component

Category

dbt Mapping

Model Naming

Notes

Source Components

Microsoft.OLEDBSource (https://learn.microsoft.com/en-us/sql/integration-services/data-flow/ole-db-source?view=sql-server-ver17)

Source

Staging Model

stg_raw__{component_name}

-

Microsoft.FlatFileSource (https://learn.microsoft.com/en-us/sql/integration-services/data-flow/flat-file-source?view=sql-server-ver17)

Source

Staging Model

stg_raw__{component_name}

-

Transformation Components

Microsoft.DerivedColumn (https://learn.microsoft.com/en-us/sql/integration-services/data-flow/transformations/derived-column-transformation?view=sql-server-ver17)

Transformation

Intermediate Model (SELECT with expressions)

int_{component_name}

-

Microsoft.DataConvert (https://learn.microsoft.com/en-us/sql/integration-services/data-flow/transformations/data-conversion-transformation?view=sql-server-ver17)

Transformation

Intermediate Model (CAST expressions)

int_{component_name}

-

Microsoft.Lookup (https://learn.microsoft.com/en-us/sql/integration-services/data-flow/transformations/lookup-transformation?view=sql-server-ver17)

Transformation

Intermediate Model (LEFT JOIN)

int_{component_name}

Might present functional differences for ORDER BY requirements. Check FDM SSC-FDM-SSIS0001 for more information

Microsoft.UnionAll (https://learn.microsoft.com/en-us/sql/integration-services/data-flow/transformations/union-all-transformation?view=sql-server-ver17)

Transformation

Intermediate Model (UNION ALL)

int_{component_name}

-

Microsoft.Merge (https://learn.microsoft.com/en-us/sql/integration-services/data-flow/transformations/merge-transformation?view=sql-server-ver17)

Transformation

Intermediate Model (UNION ALL)

int_{component_name}

Might present functional differences for sorted output. Check FDM SSC-FDM-SSIS0002 for more information

Microsoft.MergeJoin (https://learn.microsoft.com/en-us/sql/integration-services/data-flow/transformations/merge-join-transformation?view=sql-server-ver17)

Transformation

Intermediate Model (JOIN)

int_{component_name}

Might present functional differences for ORDER BY requirements. Check FDM SSC-FDM-SSIS0004 for more information

Microsoft.ConditionalSplit (https://learn.microsoft.com/en-us/sql/integration-services/data-flow/transformations/conditional-split-transformation?view=sql-server-ver17)

Transformation

Intermediate Model (Router pattern with CTEs)

int_{component_name}

-

Microsoft.Multicast (https://learn.microsoft.com/en-us/sql/integration-services/data-flow/transformations/multicast-transformation?view=sql-server-ver17)

Transformation

Intermediate Model (SELECT pass-through)

int_{component_name}

-

Microsoft.RowCount (https://learn.microsoft.com/en-us/sql/integration-services/data-flow/transformations/row-count-transformation?view=sql-server-ver17)

Transformation

Intermediate Model with macro

int_{component_name}

Uses m_update_row_count_variable macro

Destination Components

Microsoft.OLEDBDestination (https://learn.microsoft.com/en-us/sql/integration-services/data-flow/ole-db-destination?view=sql-server-ver17)

Destination

Mart Model (table)

{target_table_name}

-

Microsoft.FlatFileDestination (https://learn.microsoft.com/en-us/sql/integration-services/data-flow/flat-file-destination?view=sql-server-ver17)

Destination

Mart Model (table)

{target_table_name}

-

Note: Unlisted Data Flow components generate EWI SSC-EWI-SSIS0001.

Language: English