Advertisement

Biml for Beginners: Speed Up Your SSIS Development (PASS Summit 2016)

Tech Lead and Senior Data Management & Analytics Consultant | Microsoft Data Platform MVP
Dec. 29, 2020
Advertisement

More Related Content

More from Cathrine Wilhelmsen(20)

Advertisement

Biml for Beginners: Speed Up Your SSIS Development (PASS Summit 2016)

  1. Biml for Beginners Speed Up Your SSIS Development Cathrine Wilhelmsen, Data Warehouse Architect
  2. 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! Biml for Beginners: Speed Up Your SSIS Development
  3. Please silence cell phones
  4. Explore Everything PASS Has to Offer FREE ONLINE WEBINAR EVENTS FREE 1-DAY LOCAL TRAINING EVENTS LOCAL USER GROUPS AROUND THE WORLD ONLINE SPECIAL INTEREST USER GROUPS BUSINESS ANALYTICS TRAINING VOLUNTEERING OPPORTUNITIES PASS COMMUNITY NEWSLETTER BA INSIGHTS NEWSLETTERFREE ONLINE RESOURCES
  5. Session Evaluations ways to access Go to passSummit.com Download the GuideBook App and search: PASS Summit 2016 Follow the QR code link displayed on session signage throughout the conference venue and in the program guide Submit by 5pm Friday November 6th to WIN prizes Your feedback is important and valuable. 3
  6. Biml Basics Tools & Projects Code Management …the next 75 minutes…
  7. Cathrine Wilhelmsen Data Warehouse Architect Microsoft Data Platform MVP BimlHero Certified Expert SQLSaturday organizer Speaker, blogger and chronic volunteer @cathrinewcathrinew.net
  8. SSIS developer? Easily bored? Tired of repetitive work? Who are you?
  9. Long development time? Many SSIS packages? Slow GUI editor? Your work day?
  10. Ever experienced this? new standards! …yay...job done!
  11. Ready for a change?
  12. Business Intelligence Markup Language Easy to read and write XML language Describes business intelligence objects: • Databases, Schemas, Tables, Views, Columns • SSIS Packages • SSAS Cubes What is Biml?
  13. Why use Biml? SSIS: Plumbing Biml: Business Logic
  14. Time wasted on dragging, dropping, connecting, aligning Create the same packages 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 SSIS: Plumbing
  15. 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 Biml: Business Logic
  16. Biml is a tool for developing SSIS packages Biml is not a tool for automated deployment Biml is not a pre-defined ETL framework Will Biml solve all your challenges?
  17. Timesaving: Many SSIS packages from one Biml file Reusable: Write once and run on any platform Flexible: Start simple, expand as you learn How can Biml help you?
  18. What do you need?
  19. Free open-source add-in for Visual Studio 60+ features for SSIS, SSAS and SSRS Includes basic Biml package generator BIDS Helper bidshelper.codeplex.com
  20. …or you can use the free Biml tools…
  21. Free add-in for Visual Studio Code editor with syntax highlighting and Intellisense More frequent updates than BIDS Helper BimlExpress varigence.com/bimlexpress
  22. Free browser-based Biml editor Code editor with Biml and C# Intellisense Reverse-engineer from SSIS to Biml BimlOnline bimlonline.com
  23. How does it work? …generated packages look exactly like manually created packages
  24. <Biml xmlns="http://schemas.varigence.com/biml.xsd"> <Packages> <Package Name="EmptyPackage1"></Package> <Package Name="EmptyPackage2"/> </Packages> </Biml> Biml syntax
  25. <Biml xmlns="http://schemas.varigence.com/biml.xsd"> <Packages> <Package Name="EmptyPackage1"></Package> <Package Name="EmptyPackage2"/> </Packages> </Biml> Biml syntax: Root Element
  26. <Biml xmlns="http://schemas.varigence.com/biml.xsd"> <Packages> <Package Name="EmptyPackage1"></Package> <Package Name="EmptyPackage2"/> </Packages> </Biml> Biml syntax: Collections of Elements
  27. <Biml xmlns="http://schemas.varigence.com/biml.xsd"> <Packages> <Package Name="EmptyPackage1"></Package> <Package Name="EmptyPackage2"/> </Packages> </Biml> Biml syntax: Elements
  28. <Biml xmlns="http://schemas.varigence.com/biml.xsd"> <Packages> <Package Name="EmptyPackage1"></Package> <Package Name="EmptyPackage2"/> </Packages> </Biml> Biml syntax: Attributes
  29. <Biml xmlns="http://schemas.varigence.com/biml.xsd"> <Packages> <Package Name="EmptyPackage1"></Package> <Package Name="EmptyPackage2"/> </Packages> </Biml> Biml syntax: Full vs. Shorthand Syntax
  30. Let's generate some packages!
  31. Goal: Load from source to staging
  32. Add New Biml File from BimlExpress menu…
  33. …or right-click on SSIS project to Add New Biml File
  34. Biml files are placed under Miscellaneous
  35. Check Biml For Errors from BimlExpress menu…
  36. …or right-click on file to Check Biml For Errors
  37. Generate SSIS Packages from BimlExpress menu…
  38. …or right-click on file to Generate SSIS Packages
  39. 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>
  40. 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>
  41. .biml vs .dtsx: human-readable vs ALL THE CODE! (20% zoom)(150% zoom)
  42. Ok, so we can go from Biml to SSIS…
  43. …can we go from SSIS to Biml?
  44. Yes!
  45. Let's reverse-engineer some packages!
  46. Package Importer in BimlOnline
  47. Choose a File
  48. Convert from SSIS to Biml
  49. Choose and filter assets
  50. Copy the Biml…
  51. …or Create /Add to BimlOnline Project
  52. The magic is in the
  53. 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 What is BimlScript?
  54. <# … #> Control Nuggets (Control logic) <#= … #> Text Nuggets (Returns string) <#@ … #> Directives (Compiler instructions) <#+ … #> Class Nuggets (Create C# classes) BimlScript Code Nuggets
  55. <# 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
  56. <# 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
  57. <# 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
  58. <# 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
  59. Biml vs. BimlScript XML Language "Just plain text" Generate, control and manipulate Biml with C#
  60. How does it work?
  61. Yes, but how does it work?
  62. 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" />
  63. Let's generate a lot of packages!
  64. 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 Don't Repeat Yourself
  65. 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" #> The directive will be replaced by the included file Works like an automated Copy & Paste Include Files
  66. Include Files
  67. Include Files
  68. Include Files
  69. 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)#> CallBimlScript with Parameters
  70. CallBimlScript with Parameters
  71. CallBimlScript with Parameters
  72. CallBimlScript with Parameters
  73. CallBimlScript with Parameters
  74. CallBimlScript with Parameters
  75. 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
  76. 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 Tiered Biml Files
  77. 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: What is this RootNode?
  78. Inside the Black Box: Tiered Biml Files <#@ template tier="1" #> <Connections>...</Connections> <#@ template tier="2" #> <Packages>...</Packages> <#@ template tier="3" #> <Package>...</Package>
  79. Inside the Black Box: Tiered Biml Files <#@ template tier="1" #> <Connections>...</Connections> <#@ template tier="2" #> <Packages>...</Packages> <#@ template tier="3" #> <Package>...</Package>
  80. Inside the Black Box: Tiered Biml Files <#@ template tier="1" #> <Connections>...</Connections> <#@ template tier="2" #> <Packages>...</Packages> <#@ template tier="3" #> <Package>...</Package>
  81. Inside the Black Box: Tiered Biml Files <#@ template tier="1" #> <Connections>...</Connections> <#@ template tier="2" #> <Packages>...</Packages> <#@ template tier="3" #> <Package>...</Package>
  82. Inside the Black Box: Tiered Biml Files <#@ template tier="1" #> <Connections>...</Connections> <#@ template tier="2" #> <Packages>...</Packages> <#@ template tier="3" #> <Package>...</Package>
  83. Inside the Black Box: Tiered Biml Files <#@ template tier="1" #> <Connections>...</Connections> <#@ template tier="2" #> <Packages>...</Packages> <#@ template tier="3" #> <Package>...</Package>
  84. Inside the Black Box: Tiered Biml Files <#@ template tier="1" #> <Connections>...</Connections> <#@ template tier="2" #> <Packages>...</Packages> <#@ template tier="3" #> <Package>...</Package>
  85. Inside the Black Box: Tiered Biml Files <#@ template tier="1" #> <Connections>...</Connections> <#@ template tier="2" #> <Packages>...</Packages> <#@ template tier="3" #> <Package>...</Package>
  86. Inside the Black Box: Tiered Biml Files <#@ template tier="1" #> <Connections>...</Connections> <#@ template tier="2" #> <Packages>...</Packages> <#@ template tier="3" #> <Package>...</Package>
  87. Inside the Black Box: Tiered Biml Files <#@ template tier="1" #> <Connections>...</Connections> <#@ template tier="2" #> <Packages>...</Packages> <#@ template tier="3" #> <Package>...</Package>
  88. Inside the Black Box: Tiered Biml Files
  89. 1. Create Biml files with specified tiers 2. Select all the tiered Biml files 3. Right-click and click Generate SSIS Packages How do you use Tiered Biml files? 1 2 3
  90. How does this actually work?
  91. Biml Basics Tools & Projects Code Management …the past 75 minutes…
  92. Free online training bimlscript.com Where can I learn more?
  93. Get things done Start small Start simple Start with ugly code Keep going Expand Improve Deliver often
  94. …BimlBreak the rest of the week! Biml on Monday...
  95. Thank You! Learn more from Cathrine Wilhelmsen cathrinew.net or follow @cathrinew
  96. Session Evaluations ways to access Go to passSummit.com Download the GuideBook App and search: PASS Summit 2016 Follow the QR code link displayed on session signage throughout the conference venue and in the program guide Submit by 5pm Friday November 6th to WIN prizes Your feedback is important and valuable. 3
Advertisement