Skip to main content

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​

SSISClassHopStatusNotes
PackageMicrosoft.PackageWorkflowAutomaticPackage variables and parameters become workflow parameters; variables computed by expressions are evaluated when the workflow starts
Sequence containerSTOCK:SEQUENCEWorkflow, run by a Workflow actionAutomatic
For Loop containerSTOCK:FORLOOPRepeat action around an iteration: check the condition, run the body, assignAutomatic
Foreach Loop containerSTOCK:FOREACHLOOPA pipeline that lists the items and runs the loop body per item with a Workflow executorAutomaticFile, item (fixed list) and ADO (rows of a query) enumerators; other enumerators are placeholders
Data Flow TaskMicrosoft.PipelinePipeline actionAutomaticOne pipeline per Data Flow Task
Execute SQL TaskMicrosoft.ExecuteSQLTaskSQL actionAutomatic? 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 resultMicrosoft.ExecuteSQLTaskA pipeline: Table input, then Set variablesAutomatic
Execute SQL Task, statement from an expressionMicrosoft.ExecuteSQLTaskA pipeline that computes the statement and runs it (Execute row SQL script)Automatic
Execute T-SQL Statement TaskMicrosoft.DbMaintenanceTSQLExecuteTaskSQL actionAutomatic
Execute Package Task, project referenceMicrosoft.ExecutePackageTaskWorkflow action, with the parameter bindingsAutomatic
Execute Package Task, file referenceMicrosoft.ExecutePackageTaskWorkflow action on the converted packagePartialRuns the converted package if it was imported with the project
Expression TaskMicrosoft.ExpressionTaskA pipeline that evaluates the expression and sets the variableAutomatic
File System TaskMicrosoft.FileSystemTaskCopy files, Delete file, Create folderAutomaticCopy, move and rename file or directory, delete file, create directory; directory deletes are placeholders
Send Mail TaskMicrosoft.SendMailTaskMail actionAutomatic
Execute Process TaskMicrosoft.ExecuteProcessShell actionAutomatic
Script TaskMicrosoft.ScriptTaskDummy placeholderManualIts C# or Visual Basic is written next to the workflow, as .cs.txt or .vb.txt
Disabled task or containerDummy, treated as succeededAutomatic

Precedence constraints and event handlers​

SSISHopStatusNotes
Success, failure and completion constraintsHops that follow success, failure, or unconditionallyAutomaticTasks 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 expressionThe expression is evaluated and checked by a Simple evaluation; when false, the branch ends without errorAutomatic
OnPreExecute, OnPostExecute, OnError handlersThe package or task runs in a workflow between its handlers, in SSIS's order; on failure OnError and OnPostExecute, then AbortPartial on a package or containerA 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 handlersNot convertedManualHop has no such events
System variables (System::StartTime, System::PackageName, …)Variables System.StartTime, …, set by a pipeline when the package startsAutomaticStart time, execution GUID, machine, user, and the package's name, id and version

Data flow​

SSISClassHopStatusNotes
OLE DB Source, ADO.NET Source, ODBC SourceMicrosoft.OLEDBSource, Microsoft.DataReaderSourceAdapter, Microsoft.SSISODBCSrcTable inputAutomaticA table becomes a SELECT of the selected columns; ? parameters become ${variables}, and are flagged
OLE DB, ADO.NET, SQL Server and ODBC DestinationMicrosoft.OLEDBDestination, Microsoft.ADONETDestination, Microsoft.SQLServerDestination, Microsoft.SSISODBCDstTable output, with the column mappingAutomaticAfter 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, delimitedMicrosoft.FlatFileSourceCSV file input, then If null for empty valuesAutomaticSSIS 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 rightMicrosoft.FlatFileSourceText file input of type Fixed, one row per lineAutomatic
Flat File DestinationMicrosoft.FlatFileDestinationText file output; padded columns for fixed widthAutomatic
Excel SourceMicrosoft.ExcelSourceMicrosoft Excel inputAutomatic
Excel DestinationMicrosoft.ExcelDestinationMicrosoft Excel writerPartialCheck the header row of a new workbook
Derived ColumnMicrosoft.DerivedColumnUser Defined Java Class with the translated expressionsAutomatic
Conditional SplitMicrosoft.ConditionalSplitUser Defined Java Class that picks the output, then Switch / caseAutomaticA condition that evaluates to NULL fails, as in SSIS
Lookup, full cacheMicrosoft.LookupTable input + Stream lookup + Filter rows for the match and no-match outputsAutomaticExact 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 cacheMicrosoft.LookupDatabase join with SSIS's own per-row queryAutomaticThe database's collation decides what matches, as in SSIS
Lookup on a cache connectionMicrosoft.LookupDe-serialize from file (the cache file), then as any LookupAutomatic
Cache TransformMicrosoft.CacheSelect values + Serialize to filePartialThe cache becomes a file in ${java.io.tmpdir}/hop-ssis-cache
Fuzzy LookupMicrosoft.FuzzyLookupTable input (reference table) + Fuzzy match by pair-letter similarityPartialSeveral join columns are joined into one key; scores differ from SSIS's
Data ConversionMicrosoft.DataConvertCalculator, copy of field with the target typeAutomaticA User Defined Java Class with SSIS's casts for date, time and binary columns
SortMicrosoft.SortSort rows; unique rows when duplicates are removedAutomatic
Merge JoinMicrosoft.MergeJoinMerge join + Select values for the output columnsAutomaticFlagged after a Sort with comparison flags (such as ignore case): SSIS's Merge Join ignores them, so its result depends on row order
Union AllMicrosoft.UnionAllSelect values per input (+ Add constants for unmapped columns) into a DummyAutomatic
MergeMicrosoft.MergeSelect values per input into a Sorted mergeAutomatic
MulticastMicrosoft.MulticastDummy that copies rows to every hopAutomatic
AggregateMicrosoft.AggregateMemory group byAutomatic
Row CountMicrosoft.RowCountThe rows pass on; a copy is counted and the count set in the variableAutomatic
AuditMicrosoft.LineageGet variables, from the system variablesAutomatic
Percentage SamplingMicrosoft.PctSamplingUser Defined Java Class that draws each row + Filter rows to the selected and unselected outputsAutomatic
Row SamplingMicrosoft.RowSamplingReservoir samplingAutomaticOnly when the unselected output is not used; otherwise a placeholder
Character MapMicrosoft.CharacterMapUser Defined Java ClassAutomaticLowercase and uppercase, in place or into a new column; other mappings are placeholders
UnpivotMicrosoft.UnPivotRow normaliser + Select values + Filter rows that drops NULL values, as SSIS doesAutomatic
OLE DB CommandMicrosoft.OLEDBCommandExecute SQL script, per row, with bound parametersAutomaticParameters bind in the command's order
Slowly Changing DimensionMicrosoft.SCDTable 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)AutomaticBusiness keys compare without case and trailing spaces, unless SSIS_KEYS_IGNORE_CASE is N; the wizard's downstream flow converts as it is
Script ComponentMicrosoft.ScriptComponentHostDummy placeholder; with --translate-scripts, a User Defined Java ClassManual; Partial when translatedIts code is written next to the pipeline, with a .script.json of its columns; see Translate Script Components
Error outputsHop error handling on the rejecting transformAutomaticWhere 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.