350 likes | 629 Views
SSIS Custom Components. Dave Ballantyne dave.ballantyne@live.co.uk @ davebally. Why ?. Provide new functionality not provided as standard. Why ?. Reusability Component is a DLL Single code base Can be used multiple times in a single project Can be shared across multiple projects
E N D
SSIS Custom Components Dave Ballantyne dave.ballantyne@live.co.uk @davebally
Why ? • Provide new functionality not provided as standard
Why ? • Reusability • Component is a DLL • Single code base • Can be used multiple times in a single project • Can be shared across multiple projects • Easy to test Component version • Performance • Faster than scripting • Well documented • Though not a how-to guide
Types Of Component • Data Connections • Log Providers • For Each Loops • Control Flow Tasks • Data Flow Pipeline Component • Custom User Interface
Pipeline Component Types • Sources • Transforms • Destinations
Design/Run Time • Design Time • Work done in BIDS • attachments / detachments • Validation • Column usage • Run Time • Metadata interrogation • DTEXEC • Flow of data
Demo 1 • Reuse and Performance
Requirements • Visual Studio – BIDS is not enough • Or Visual Basic / C# Express • Client Tools SDK
Starting Out • Target Framework 3.5 (Advanced compile options) • Sign the assembley • Add References(Program file(x86)/<SqlServer>/100/sdk/Assemblies) • Microsoft.SqlServer.DTSPipelineWrap • Microsoft.SqlServer.DTSRuntimeWrap • Microsoft.SqlServer.ManagedDTS • Microsoft.SqlServer.PipeLineHost
Class Creation • Inherits PipelineComponent • Uses attribute DtsPipelineComponent
Post Build • Copy DLL to “C:\Program Files (x86)\Microsoft SQL Server\100\DTS\PipelineComponents” • Register to Global Assembley Cache using GACUTIL • Must Restart BIDS • For first use “Choose Items”,”SSIS Data Flow Components” ,tick Component
MetaData • IDTSComponentMetaData100 • PipelineComponent.ComponentMetaData • Describes the Component to the engine • Inputs, Outputs • Custom data held within IDTSCustomProperty100 • Most level s of object
MetaData • Inputs – IDTSInput100 • Exposed via InputCollection member in MetaData • One instance for each attached input • Contains virtual column collection • Accessed with GetVirtualInput() member • View of the IDTSOutput100 of the Upstream component • IDTSVirtualInputColumn100 • Input Column Collection • Accessed with InputColumnCollection • Those that are used in the component • IDTSInputColumn100 • SetUsageType used to add the virtual column to the input column
MetaData • Outputs – IDTSOutput100 • Exposed via OutputCollection member in MetaData • One class for each output • output Column Collection • Accessed with OutputColumnCollection • IDTSOutputColumn100 • Dispositions – Errors • Set IsErrorOut on IDTSOutput100
Icons • Size • 16*16 For ToolBox • 32*32 For Design Surface • Order of “IconResources” is important • Build action must be “Embedded Resource”
Errors and warnings • FireError • At design or run time
Errors and warnings • FireWarning
Design Time Methods • Methods • ProvideComponentProperties • Define initial metadata of component • Validate • Tests the metadata is correct • ReinitializeMetaData • Fix the metadata
Demo 2 • Build a simple component
Run-Time Processing • Pre-Execute • PrimeOutput • ProcessInput • PostExecute
PreExecute • Setup the runtime objects • Interrogate the Metadata and buffer manager • Find the colindex(s) in buffers based on metadata • BufferManager.FindColumnByLineageID(InputId,InputCol.LineageId) PrimeOutput
Process Input • Loop on buffer.NextRow • If buffer.EndOfRowset is true set outputBuffer.SetEndOfRowset() • MetaData functions are not optimized for performance.
PipelineBuffer • Used for both input and output buffer • Get<DataType> and Set <DataType> • SetString / GetString • SetInt32 / GetInt32 • AddRow • Insert and move to new row • SetEndOfRowset • After final row has been poplulated
Sync Or Async ? • Sync • Add columns to existing data flow • SynchronousInputID of output = ID of input • Async • Create new data flow buffer • SynchronousInputID =0
Demo 3 • RunTime execution
User Interface • A Class that implements IDtsComponentUI • Registered to the component class with UITypeName • PublicKeyToken is found with GACUTIL
User Interface • Demo 4 • User interface • UI Code Step Through
Conclusion • Like SSIS , large learning curve • Reusability • Potentially Faster ? • .Net skills are required
SSIS Custom Components Dave Ballantyne dave.ballantyne@live.co.uk @davebally