Biml for Beginners: Speed up your SSIS development (Malta Microsoft Data Platform User Group)
-
Upload
cathrine-wilhelmsen -
Category
Data & Analytics
-
view
344 -
download
4
Transcript of Biml for Beginners: Speed up your SSIS development (Malta Microsoft Data Platform User Group)
Session Description
Are you tired of creating and updating the same SSIS packages again and again? Is your wrist hurting from
all that clicking, dragging, dropping, connecting and aligning? Do you want to take the next step and really
speed up your SSIS development?
Say goodbye to repetitive work and hello to Biml, the markup language for Business Intelligence projects.
In this session we will look at the basics of Biml. First learn how to use Biml to generate SSIS packages
from database metadata. Then see how you can reuse code to implement changes in multiple SSIS
packages and projects with just a few clicks. Finally, we will create an example project that you can
download and start with to speed up your SSIS development from day one.
Stop wasting your valuable time on doing the same things over and over and over again, and see how you
can complete in a day what once took more than a week!
Cathrine Wilhelmsen
@cathrinew
cathrinew.net
PASS Community EvangelistData Warehouse Architect
Business Intelligence Developer
What is Biml?
Business Intelligence Markup Language
Easy to read and write XML language
Describes business intelligence objects:
• Databases, Schemas, Tables, Views, Columns
• SSIS Packages
• SSAS Cubes
SSIS: Plumbing
Time wasted on dragging, dropping, connecting, aligning
Create the same package over and over again with minor changes
Standards, patterns and templates must be defined up-front
Changes must be done in every single package
High risk of manual errors
More packages, more time
Biml: Business Logic
Spend time on what is unique in a package
Create a pattern once and reuse for all similar packages
Handle scope and requirement changes quickly and easily
Changes can be applied to all packages at once
Lower risk of manual errors
Longer time to start, but then reuse and scale
Will Biml solve all your challenges?
Probably not...
Biml is a tool for generating SSIS packages
Biml is not a pre-defined ETL framework
Biml is not a tool for automated deployment
...but it will solve many challenges!
How can Biml help you?
Biml is great for large projects with common patterns…
Timesaving: Many SSIS packages from one Biml file
Reusable: Write once and run on any platform
Flexible: Start simple, expand as you learn
…but is also useful for smaller projects!
BIDS Helper
Free open-source add-in for Visual Studio
60+ features for SSIS, SSAS and SSRS
Includes basic Biml package generator
bidshelper.codeplex.com
BimlExpress
Free add-in for Visual Studio
Code editor with syntax highlighting and Biml Intellisense
More frequent updates than BIDS Helper
varigence.com/bimlexpress
BimlOnline
Free browser-based Biml editor
Code editor with Biml and C# Intellisense
Reverse-engineer from SSIS to Biml
bimlonline.com
BimlStudio
Licensed full-featured development environment for Biml
Visual designer and metadata modeling
Full-stack automation and transformers
varigence.com/bimlstudio
Biml syntax
<Biml xmlns="http://schemas.varigence.com/biml.xsd">
<Packages>
<Package Name="EmptyPackage1"></Package>
<Package Name="EmptyPackage2"/>
</Packages>
</Biml>
Biml syntax: Root Element
<Biml xmlns="http://schemas.varigence.com/biml.xsd">
<Packages>
<Package Name="EmptyPackage1"></Package>
<Package Name="EmptyPackage2"/>
</Packages>
</Biml>
Biml syntax: Collections of Elements
<Biml xmlns="http://schemas.varigence.com/biml.xsd">
<Packages>
<Package Name="EmptyPackage1"></Package>
<Package Name="EmptyPackage2"/>
</Packages>
</Biml>
Biml syntax: Elements
<Biml xmlns="http://schemas.varigence.com/biml.xsd">
<Packages>
<Package Name="EmptyPackage1"></Package>
<Package Name="EmptyPackage2"/>
</Packages>
</Biml>
Biml syntax: Attributes
<Biml xmlns="http://schemas.varigence.com/biml.xsd">
<Packages>
<Package Name="EmptyPackage1"></Package>
<Package Name="EmptyPackage2"/>
</Packages>
</Biml>
Biml syntax: Full vs. Shorthand Syntax
<Biml xmlns="http://schemas.varigence.com/biml.xsd">
<Packages>
<Package Name="EmptyPackage1"></Package>
<Package Name="EmptyPackage2"/>
</Packages>
</Biml>
From Biml to SSIS: Control Flow
<Package Name="TruncateLoad" ConstraintMode="Linear">
<Tasks>
<ExecuteSQL Name="Truncate Table" ConnectionName="Staging">
<DirectInput>TRUNCATE TABLE DestinationTable</DirectInput>
</ExecuteSQL>
<Dataflow Name="Load Table">
<Transformations>...</Transformations>
</Dataflow>
</Tasks>
</Package>
From Biml to SSIS: Data Flow
<Transformations>
<OleDbSource Name="Source" ConnectionName="AW2014">
<ExternalTableInput Table="SourceTable" />
</OleDbSource>
<DerivedColumns Name="Add LoadDate">
<Columns>
<Column Name="LoadDate" DataType="DateTime">
@[System::StartTime]
</Column>
</Columns>
</DerivedColumns>
<OleDbDestination Name="Destination" ConnectionName="Staging">
<ExternalTableOutput Table="DestinationTable" />
</OleDbDestination>
</Transformations>
What is BimlScript?
Extend Biml with C# or VB code blocks
Import database structure and metadata
Loop over tables and columns
Expressions replace static values
Generate, control and manipulate Biml code
BimlScript Code Nuggets
<# … #> Control Nuggets (Control logic)
<#= … #> Text Nuggets (Returns string)
<#@ … #> Directives (Compiler instructions)
<#+ … #> Class Nuggets (Create C# classes)
BimlScript Syntax
<# var con = SchemaManager.CreateConnectionNode(...); #>
<# var metadata = con.GetDatabaseSchema(); #>
<Biml xmlns="http://schemas.varigence.com/biml.xsd">
<Packages>
<# foreach (var table in metadata.TableNodes) { #>
<Package Name="Load_<#=table.Name#>"></Package>
<# } #>
</Packages>
</Biml>
BimlScript Syntax: Import metadata
<# var con = SchemaManager.CreateConnectionNode(...); #>
<# var metadata = con.GetDatabaseSchema(); #>
<Biml xmlns="http://schemas.varigence.com/biml.xsd">
<Packages>
<# foreach (var table in metadata.TableNodes) { #>
<Package Name="Load_<#=table.Name#>"></Package>
<# } #>
</Packages>
</Biml>
BimlScript Syntax: Loop over tables
<# var con = SchemaManager.CreateConnectionNode(...); #>
<# var metadata = con.GetDatabaseSchema(); #>
<Biml xmlns="http://schemas.varigence.com/biml.xsd">
<Packages>
<# foreach (var table in metadata.TableNodes) { #>
<Package Name="Load_<#=table.Name#>"></Package>
<# } #>
</Packages>
</Biml>
BimlScript Syntax: Replace static values
<# var con = SchemaManager.CreateConnectionNode(...); #>
<# var metadata = con.GetDatabaseSchema(); #>
<Biml xmlns="http://schemas.varigence.com/biml.xsd">
<Packages>
<# foreach (var table in metadata.TableNodes) { #>
<Package Name="Load_<#=table.Name#>"></Package>
<# } #>
</Packages>
</Biml>
Yes, but how does it actually work?
<# foreach (var table in RootNode.Tables) { #><Package Name="Load_<#=table.Name#>" />
<# } #>
<Package Name="Load_Customer" /><Package Name="Load_Product" /><Package Name="Load_Sales" />
Don't Repeat Yourself
Move common code to separate files
Centralize and reuse in many projects
Update code once for all projects
1. Include files
2. CallBimlScript with parameters
3. Tiered Biml files
Include Files
Include common code in multiple files and projects
Can include many file types: .biml .txt .sql .cs
Use the include directive
<#@ include file="CommonCode.biml" #>
This directive will be replaced by the included file
Works like an automated Copy & Paste
CallBimlScript with Parameters
Like a parameterized include or stored procedure
File to be called (callee) specifies input parameters
<#@ property name="Param" type="String" #>
File that calls (caller) passes input parameters
<#=CallBimlScript("CommonCode.biml", Param)#>
Tiered Biml Files
Split Biml code in multiple files
Specify tiers by using the template directive
<#@ template tier="2" #>
Biml files without BimlScript are implicitly tier 0
Biml files with BimlScript are implicitly tier 1
Tiered Biml Files
Biml is compiled from lowest to highest tier to:• Solve logical dependencies
• Build solutions in multiple steps behind the scenes
For each tier, objects are added to the RootNode
Higher tiers can use objects from lower tiers
What is this RootNode?
When working with flat Biml,the <Biml> root element contains collections of elements:
<Biml>
<Connections>...</Connections>
<Databases>...</Databases>
<Schemas>...</Schemas>
<Tables>...</Tables>
<Projects>...</Projects>
<Packages>...</Packages>
</Biml>
When working with BimlScript, the RootNode object contains collections of objects:
Inside the Black Box: Tiered Biml Files
<#@ template tier="1" #><Connections>...</Connections>
<#@ template tier="2" #><Packages>...</Packages>
<#@ template tier="3" #><Package>...</Package>
Inside the Black Box: Tiered Biml Files
<#@ template tier="1" #><Connections>...</Connections>
<#@ template tier="2" #><Packages>...</Packages>
<#@ template tier="3" #><Package>...</Package>
Inside the Black Box: Tiered Biml Files
<#@ template tier="1" #><Connections>...</Connections>
<#@ template tier="2" #><Packages>...</Packages>
<#@ template tier="3" #><Package>...</Package>
Inside the Black Box: Tiered Biml Files
<#@ template tier="1" #><Connections>...</Connections>
<#@ template tier="2" #><Packages>...</Packages>
<#@ template tier="3" #><Package>...</Package>
Inside the Black Box: Tiered Biml Files
<#@ template tier="1" #><Connections>...</Connections>
<#@ template tier="2" #><Packages>...</Packages>
<#@ template tier="3" #><Package>...</Package>
Inside the Black Box: Tiered Biml Files
<#@ template tier="1" #><Connections>...</Connections>
<#@ template tier="2" #><Packages>...</Packages>
<#@ template tier="3" #><Package>...</Package>
Inside the Black Box: Tiered Biml Files
<#@ template tier="1" #><Connections>...</Connections>
<#@ template tier="2" #><Packages>...</Packages>
<#@ template tier="3" #><Package>...</Package>
Inside the Black Box: Tiered Biml Files
<#@ template tier="1" #><Connections>...</Connections>
<#@ template tier="2" #><Packages>...</Packages>
<#@ template tier="3" #><Package>...</Package>
Inside the Black Box: Tiered Biml Files
<#@ template tier="1" #><Connections>...</Connections>
<#@ template tier="2" #><Packages>...</Packages>
<#@ template tier="3" #><Package>...</Package>
Inside the Black Box: Tiered Biml Files
<#@ template tier="1" #><Connections>...</Connections>
<#@ template tier="2" #><Packages>...</Packages>
<#@ template tier="3" #><Package>...</Package>
How do you use Tiered Biml files?
1. Create Biml files with specified tiers
2. Select all the tiered Biml files
3. Right-click and click Generate SSIS Packages
1
2
3
Get things done
Start small
Start simple
Start with ugly code
Keep going
Expand
Improve
Deliver often
@cathrinew
cathrinew.net
linkedin.com/in/cathrinewilhelmsen
slideshare.net/cathrinewilhelmsen
Biml resources and references:
cathrinew.net/biml