I often find that one of the biggest obstacles to technology adoption is when people refer to the same thing in different ways. How many times have you sat in meetings and heard two people debating some particular point only to realise that they're actually both making the same point and the only thing they're disagreeing about is terminology? It happens to me all the time, or at least it seems to.
Hence, I thought it would be useful to post a list of terms that are related to SSIS in an effort to ensure that people don't misuse them. All information here is correct at the time of writing.
- Package - A file with a .dtsx suffix that contains SSIS functionality
- Package container - Superficially the same as a package but in actual fact that they are slightly different. Each package has one package container and it is possible for the package and the package container to have different names.
- Container - A container is a logical grouping of one or more other containers. There are 6 different types of containers within SSIS. Can you name them all? (hint)
- Task - The lowest unit of executable functionality in a package. All tasks exist within a special type of container called the TaskHost container. Tasks ultimately reside in a package's control-flow or in its eventhandlers.
- Executable - A task or a container
- Dataflow Task - A special task that forms the "guts" of SSIS and which even has its own execution engine.
- Pipeline - Notionally the same as a Dataflow Task because each Dataflow Task has one pipeline. The word 'Pipeline' can generally be thought of as the collection of containers that make up the Dataflow Task. Programatically speaking, if you call TaskHost.InnerObject on an instance of TaskHost that you know to be a dataflow task, you will be returned an object of type Microsoft.SqlServer.Dts.Pipeline.Wrapper.Mainpipe which is a managed wrapper to IDTSPipeline90. (There is some code here that demonstrates this).
- Component - A constituent of a Dataflow Task pipeline. One common mistake SSIS beginners make is to think of a component as a unit of execution; that is not the case, you cannot execute a component.
- Source adapter - A component that has no inputs
- Destination adapter - A component that has no outputs except for an error output
- Transformation/Transform - A component that has inputs and outputs.
The most common mistake I see people making is to refer to components as tasks; that's not what they are. Tasks live in the control-flow, components live in the dataflow and its important to make that distinction. It is this particular misunderstanding that prompted me to write this blog entry.
Hope that helps.
-Jamie