Component mapping
Every SSIS task, container and data flow component the importer has a converter for, the Apache Hop
action or transforms it becomes, and how the migration report classifies it. The report names
components by their SSIS class (Microsoft.DerivedColumn, STOCK:FOREACHLOOP, …), shown here
next to each.
Status is what the converter reports when it carries the component across:
- Automatic: a converter carries the component's settings across. Automatic is a statement about what the importer did, not a guarantee that the result behaves identically.
- Partial: converted, but a known part of the behaviour is not; the component is always flagged for review.
What conversion actually did can change this per component in the report: a setting the converter cannot carry (an error output, a parameter mapped to a variable that does not exist, a file name computed by an expression, …) flags the component as Partial with the reason, and a part that needs a person makes it Manual. A component or task whose converter fails becomes a placeholder and is reported Unsupported. Components not listed here have no converter: they become a Dummy placeholder that keeps their name, position and hops, and are reported Unsupported.
Control flow
| SSIS | Class | Hop | Status | Notes |
|---|---|---|---|---|
| Package | Microsoft.Package | Workflow | Automatic | Package variables and parameters become workflow parameters; variables computed by expressions are evaluated when the workflow starts |
| Sequence container | STOCK:SEQUENCE | Workflow, run by a Workflow action | Automatic | |
| For Loop container | STOCK:FORLOOP | Repeat action around an iteration: check the condition, run the body, assign | Automatic | |
| Foreach Loop container | STOCK:FOREACHLOOP | A pipeline that lists the items and runs the loop body per item with a Workflow executor | Automatic | File, item (fixed list) and ADO (rows of a query) enumerators; other enumerators are placeholders |
| Data Flow Task | Microsoft.Pipeline | Pipeline action | Automatic | One pipeline per Data Flow Task |
| Execute SQL Task | Microsoft.ExecuteSQLTask | SQL action | Automatic | ? parameters bound to variables become ${variables}, in quotes for string and date variables, and are flagged; stored procedure return values and output parameters are not converted |
| Execute SQL Task, single-row result | Microsoft.ExecuteSQLTask | A pipeline: Table input, then Set variables | Automatic | |
| Execute SQL Task, statement from an expression | Microsoft.ExecuteSQLTask | A pipeline that computes the statement and runs it (Execute row SQL script) | Automatic | |
| Execute T-SQL Statement Task | Microsoft.DbMaintenanceTSQLExecuteTask | SQL action | Automatic | |
| Execute Package Task, project reference | Microsoft.ExecutePackageTask | Workflow action, with the parameter bindings | Automatic | |
| Execute Package Task, file reference | Microsoft.ExecutePackageTask | Workflow action on the converted package | Partial | Runs the converted package if it was imported with the project |
| Expression Task | Microsoft.ExpressionTask | A pipeline that evaluates the expression and sets the variable | Automatic | |
| File System Task | Microsoft.FileSystemTask | Copy files, Delete file, Create folder | Automatic | Copy, move and rename file or directory, delete file, create directory; directory deletes are placeholders |
| Send Mail Task | Microsoft.SendMailTask | Mail action | Automatic | |
| Execute Process Task | Microsoft.ExecuteProcess | Shell action | Automatic | |
| Script Task | Microsoft.ScriptTask | Dummy placeholder | Manual | Its C# or Visual Basic is written next to the workflow, as .cs.txt or .vb.txt |
| Disabled task or container | Dummy, treated as succeeded | Automatic |
Precedence constraints and event handlers
| SSIS | Hop | Status | Notes |
|---|---|---|---|
| Success, failure and completion constraints | Hops that follow success, failure, or unconditionally | Automatic | Tasks that do not depend on each other run in parallel, as in SSIS. Several tasks one task waits for run in a workflow of their own; a Join action is used only for other shapes, and flagged |
| Constraint with an expression | The expression is evaluated and checked by a Simple evaluation; when false, the branch ends without error | Automatic | |
| OnPreExecute, OnPostExecute, OnError handlers | The package or task runs in a workflow between its handlers, in SSIS's order; on failure OnError and OnPostExecute, then Abort | Partial on a package or container | A package's or container's OnPreExecute and OnPostExecute run once, not for every task inside; OnError runs once, without System::ErrorDescription |
| OnWarning, OnInformation and other handlers | Not converted | Manual | Hop has no such events |
System variables (System::StartTime, System::PackageName, …) | Variables System.StartTime, …, set by a pipeline when the package starts | Automatic | Start time, execution GUID, machine, user, and the package's name, id and version |
Data flow
| SSIS | Class | Hop | Status | Notes |
|---|---|---|---|---|
| OLE DB Source, ADO.NET Source, ODBC Source | Microsoft.OLEDBSource, Microsoft.DataReaderSourceAdapter, Microsoft.SSISODBCSrc | Table input | Automatic | A table becomes a SELECT of the selected columns; ? parameters become ${variables}, and are flagged |
| OLE DB, ADO.NET, SQL Server and ODBC Destination | Microsoft.OLEDBDestination, Microsoft.ADONETDestination, Microsoft.SQLServerDestination, Microsoft.SSISODBCDst | Table output, with the column mapping | Automatic | After an OLE DB Command or a Slowly Changing Dimension, a Blocking transform first collects the whole input, so the row updates finish before the inserts start, as with SSIS's buffers |
| Flat File Source, delimited | Microsoft.FlatFileSource | CSV file input, then If null for empty values | Automatic | SSIS reads an empty value as an empty string or zero; date and time columns are read as strings, and flagged |
| Flat File Source, fixed width or ragged right | Microsoft.FlatFileSource | Text file input of type Fixed, one row per line | Automatic | |
| Flat File Destination | Microsoft.FlatFileDestination | Text file output; padded columns for fixed width | Automatic | |
| Excel Source | Microsoft.ExcelSource | Microsoft Excel input | Automatic | |
| Excel Destination | Microsoft.ExcelDestination | Microsoft Excel writer | Partial | Check the header row of a new workbook |
| Derived Column | Microsoft.DerivedColumn | User Defined Java Class with the translated expressions | Automatic | |
| Conditional Split | Microsoft.ConditionalSplit | User Defined Java Class that picks the output, then Switch / case | Automatic | A condition that evaluates to NULL fails, as in SSIS |
| Lookup, full cache | Microsoft.Lookup | Table input + Stream lookup + Filter rows for the match and no-match outputs | Automatic | Exact match, as SSIS compares in .NET; the first reference row of a key wins; Abort where SSIS fails on no match |
| Lookup, partial or no cache | Microsoft.Lookup | Database join with SSIS's own per-row query | Automatic | The database's collation decides what matches, as in SSIS |
| Lookup on a cache connection | Microsoft.Lookup | De-serialize from file (the cache file), then as any Lookup | Automatic | |
| Cache Transform | Microsoft.Cache | Select values + Serialize to file | Partial | The cache becomes a file in ${java.io.tmpdir}/hop-ssis-cache |
| Fuzzy Lookup | Microsoft.FuzzyLookup | Table input (reference table) + Fuzzy match by pair-letter similarity | Partial | Several join columns are joined into one key; scores differ from SSIS's |
| Data Conversion | Microsoft.DataConvert | Calculator, copy of field with the target type | Automatic | A User Defined Java Class with SSIS's casts for date, time and binary columns |
| Sort | Microsoft.Sort | Sort rows; unique rows when duplicates are removed | Automatic | |
| Merge Join | Microsoft.MergeJoin | Merge join + Select values for the output columns | Automatic | Flagged after a Sort with comparison flags (such as ignore case): SSIS's Merge Join ignores them, so its result depends on row order |
| Union All | Microsoft.UnionAll | Select values per input (+ Add constants for unmapped columns) into a Dummy | Automatic | |
| Merge | Microsoft.Merge | Select values per input into a Sorted merge | Automatic | |
| Multicast | Microsoft.Multicast | Dummy that copies rows to every hop | Automatic | |
| Aggregate | Microsoft.Aggregate | Memory group by | Automatic | |
| Row Count | Microsoft.RowCount | The rows pass on; a copy is counted and the count set in the variable | Automatic | |
| Audit | Microsoft.Lineage | Get variables, from the system variables | Automatic | |
| Percentage Sampling | Microsoft.PctSampling | User Defined Java Class that draws each row + Filter rows to the selected and unselected outputs | Automatic | |
| Row Sampling | Microsoft.RowSampling | Reservoir sampling | Automatic | Only when the unselected output is not used; otherwise a placeholder |
| Character Map | Microsoft.CharacterMap | User Defined Java Class | Automatic | Lowercase and uppercase, in place or into a new column; other mappings are placeholders |
| Unpivot | Microsoft.UnPivot | Row normaliser + Select values + Filter rows that drops NULL values, as SSIS does | Automatic | |
| OLE DB Command | Microsoft.OLEDBCommand | Execute SQL script, per row, with bound parameters | Automatic | Parameters bind in the command's order |
| Slowly Changing Dimension | Microsoft.SCD | Table input of the current dimension rows + Unique rows + Stream lookup + User Defined Java Class that picks the outputs + Switch / case (and Filter rows for the historical output) | Automatic | Business keys compare without case and trailing spaces, unless SSIS_KEYS_IGNORE_CASE is N; the wizard's downstream flow converts as it is |
| Script Component | Microsoft.ScriptComponentHost | Dummy placeholder; with --translate-scripts, a User Defined Java Class | Manual; Partial when translated | Its code is written next to the pipeline, with a .script.json of its columns; see Translate Script Components |
| Error outputs | Hop error handling on the rejecting transform | Automatic | Where a converter does not route them, the component is flagged |
Expressions
SSIS expressions are parsed and translated into Java, which runs in User Defined Java Classes with a
small runtime that keeps SSIS's rules: NULL propagates, && and || use three-valued logic, ?:
and the logic operators evaluate lazily, casts such as (DT_WSTR, 50) and (DT_NUMERIC, 10, 2)
convert as SSIS does, and the string, math, date and NULL functions behave like SSIS's (1-based
SUBSTRING, FINDSTRING, TOKEN, DATEADD, DATEDIFF counting boundaries, …). Two choices are
the importer's: a cast of a number with a fraction to an integer rounds half away from zero, and a
cast to a string of a given length cuts a longer value. An expression the translator does not
support leaves the component a placeholder, with the expression in the report.
Not converted
These become placeholders and are listed in the report with the settings to redo: Fuzzy Grouping, Term Extraction, Term Lookup, Pivot, Data Profiling, XML, Web Service, Analysis Services and CDC tasks and components, and third-party components.