Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Biml for Beginners - Generating SSIS Packages with BimlScript (SQLSaturday Gothenburg)

1,195 views

Published on

Biml for Beginners - Generating SSIS Packages with BimlScript (Presented at SQLSaturday Gothenburg on September 5th 2015)

Published in: Data & Analytics
  • Be the first to comment

  • Be the first to like this

Biml for Beginners - Generating SSIS Packages with BimlScript (SQLSaturday Gothenburg)

  1. 1. Biml for Beginners: Generating SSIS packages with BimlScript Cathrine Wilhelmsen September 5th 2015
  2. 2. Session description SSIS is a powerful tool for extracting, transforming and loading data, but creating the actual SSIS packages can be both tedious and time- consuming. Even if you use templates and follow best practices you often have to repeat the same steps over and over again. There are no easy ways to handle metadata and schema changes, and if there are new requirements you might have to go through all the packages one more time. It's time to bring the Don't Repeat Yourself principle to SSIS development. In this session I will use the free BIDS Helper add-in to show you the basics of Biml and BimlScript, how to generate SSIS packages automatically from databases, how easy those packages can be changed, and how to move common code to separate files that can be included where needed. See why they say Biml allows you to complete in a day what once took more than a week!
  3. 3. @cathrinew cathrinewilhelmsen.net Data Warehouse Architect Business Intelligence Developer Cathrine Wilhelmsen
  4. 4. Who are you? (*) SSIS and ETL Developer? Easily bored? Tired of repetitive work? ( * Probably not a cat )
  5. 5. Why are you here? Long development time? Many SSIS packages? Slow GUI editor? (Drag, drop, drag, drop, connect, drag, drop, connect, resize, align, drag, drop, resize, connect, align…)
  6. 6. job done! new standards yay Have you ever experienced this?
  7. 7. Ready for a change?
  8. 8. Business Intelligence Markup Language Easy to read and write XML dialect Specifies business intelligence objects Databases, schemas, tables, columns SSIS packages SSAS cubes, facts, dimensions (Mist only)
  9. 9. Highlights in Biml History founded by Scott Currie, is born Biml was extended with Biml compiler added to is launched founded is launched 2008: 2009: 2011: 2012: 2014: 2015:
  10. 10. How can Biml help you? Timesaving: Many SSIS Packages from one Biml file Reusable: Write once and run on any platform (2005 – 2014) Flexible: Start simple, expand as you learn (Of course I can create 200 packages! What do you need me to do after lunch?)
  11. 11. What do you need?
  12. 12. How does it work? Generated packages are indistinguishable from manually created packages
  13. 13. Biml syntax <Biml xmlns="http://schemas.varigence.com/biml.xsd"> <Packages> <Package Name="EmptyPackage1"></Package> <Package Name="EmptyPackage2"/> </Packages> </Biml>
  14. 14. Biml syntax: Root Element <Biml xmlns="http://schemas.varigence.com/biml.xsd"> <Packages> <Package Name="EmptyPackage1"></Package> <Package Name="EmptyPackage2"/> </Packages> </Biml>
  15. 15. Biml syntax: Collection of Elements <Biml xmlns="http://schemas.varigence.com/biml.xsd"> <Packages> <Package Name="EmptyPackage1"></Package> <Package Name="EmptyPackage2"/> </Packages> </Biml>
  16. 16. Biml syntax: Elements <Biml xmlns="http://schemas.varigence.com/biml.xsd"> <Packages> <Package Name="EmptyPackage1"></Package> <Package Name="EmptyPackage2"/> </Packages> </Biml>
  17. 17. Biml syntax: Attributes <Biml xmlns="http://schemas.varigence.com/biml.xsd"> <Packages> <Package Name="EmptyPackage1"></Package> <Package Name="EmptyPackage2"/> </Packages> </Biml>
  18. 18. Biml syntax: Full vs. Shorthand Syntax <Biml xmlns="http://schemas.varigence.com/biml.xsd"> <Packages> <Package Name="EmptyPackage1"></Package> <Package Name="EmptyPackage2"/> </Packages> </Biml>
  19. 19. Demo – Biml
  20. 20. Getting started with Biml 1. Download and install BIDS Helper (http://bidshelper.codeplex.com) 2. Right-click on SSIS project and click Add New Biml File
  21. 21. Intellisense Intellisense while typing CTRL+Space to AutoComplete or show Intellisense
  22. 22. Errors Red squiggly line: Error Blue squiggly line: Missing attribute or child element Error spelling Missing attribute: ConstraintMode
  23. 23. Errors Hovering over errors will show descriptive text Missing attribute: ConstraintMode Error spelling
  24. 24. Right-click to Check Biml for Errors
  25. 25. Your first SSIS Package from Biml Right-click on Biml file and click Generate SSIS Packages Packages will appear under SSIS Packages
  26. 26. From Biml to SSIS
  27. 27. From Biml to SSIS
  28. 28. .biml vs .dtsx: human-readable vs ALL THE CODE! (150% zoom) (20% zoom)
  29. 29. I create SSIS packages faster than that
  30. 30. But wait!
  31. 31. The magic is in the Extend Biml with C# or VB.NET code blocks Import database structure and metadata Loop over tables and columns Add expressions to replace static values Allows you to control and manipulate Biml code
  32. 32. BimlScript code blocks <#@ … #> Directives (Instructions to the BimlCompiler) <# … #> Control Blocks (Control logic) <#= … #> Expression Control Blocks (Replace block with string value) <#+ … #> Class Feature Control Blocks (Create helper methods)
  33. 33. BimlScript syntax <Biml xmlns="http://schemas.varigence.com/biml.xsd"> <Packages> <# foreach (var table in RootNode.Tables) { #> <Package Name="Load<#=table.Name#>"></Package> <# } #> </Packages> </Biml>
  34. 34. BimlScript syntax: Control Blocks <Biml xmlns="http://schemas.varigence.com/biml.xsd"> <Packages> <# foreach (var table in RootNode.Tables) { #> <Package Name="Load<#=table.Name#>"></Package> <# } #> </Packages> </Biml>
  35. 35. BimlScript syntax: Expression Control Block <Biml xmlns="http://schemas.varigence.com/biml.xsd"> <Packages> <# foreach (var table in RootNode.Tables) { #> <Package Name="Load<#=table.Name#>"></Package> <# } #> </Packages> </Biml>
  36. 36. How does it work?
  37. 37. Yes, but how does it work? 37
  38. 38. Yes, but how does it actually work? <Biml xmlns="http://schemas.varigence.com/biml.xsd"> <Packages> <# foreach (var table in RootNode.Tables) { #> <Package Name="Load<#=table.Name#>"></Package> <# } #> </Packages> </Biml> <Biml xmlns="http://schemas.varigence.com/biml.xsd"> <Packages> <Package Name="LoadCustomer"></Package> <Package Name="LoadProduct"></Package> <Package Name="LoadSales"></Package> </Packages> </Biml>
  39. 39. Demo – BimlScript
  40. 40. Basic for loop <Packages> <# for (int count = 1; count <= 5; count++) { #> <Package Name="Load_Person_Person_<#=count#>"> </Package> <# } #> </Packages>
  41. 41. foreach (table in a database) loop <#@ import namespace="Varigence.Hadron.CoreLowerer.SchemaManagement" #> <# var conAW2014 = SchemaManager.CreateConnectionNode("AW2014", "Data Source..."); #> <# var AW2014DB = conAW2014.ImportDB("","", ImportOptions.ExcludeViews); #> <Packages> <# foreach (var table in AW2014DB.TableNodes) { #> <Package Name="Load_<#=table.Schema#>_<#=table.Name#>"> </Package> <# } #> </Packages>
  42. 42. Don't Repeat Yourself Move common code to separate files Centralize and reuse in many projects Update code once for all projects 1. Split and combine Biml files 2. Include files 3. CallBimlScript with parameters
  43. 43. Split and combine Biml files Solve logical dependencies and simulate manual workflows by using tiers Tiers instruct the BimlCompiler to compile files from lowest to highest tier <#@ template tier="1" #> Higher tiers can use and might depend on objects from lower tiers Tier 1 - Create database connections Example: Tier 2 - Create loading packages Tier 3 - Create master package to execute loading packages
  44. 44. Split and combine 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
  45. 45. Behind the scenes: Split and combine Biml files RootNode <#@ template tier="0" #> <Connections> <Databases> <Schemas> <#@ template tier="1" #> <Tables> <Columns> <#@ template tier="2" #> <Packages>
  46. 46. <Connections> <Databases> <Schemas>RootNode <#@ template tier="0" #> <Connections> <Databases> <Schemas> <#@ template tier="1" #> <Tables> <Columns> <#@ template tier="2" #> <Packages> compile Behind the scenes: Split and combine Biml files
  47. 47. <Connections> <Databases> <Schemas>RootNode <#@ template tier="0" #> <Connections> <Databases> <Schemas> <#@ template tier="1" #> <Tables> <Columns> <#@ template tier="2" #> <Packages> use Behind the scenes: Split and combine Biml files
  48. 48. <Connections> <Databases> <Schemas> <Tables> <Columns> RootNode <#@ template tier="0" #> <Connections> <Databases> <Schemas> <#@ template tier="1" #> <Tables> <Columns> <#@ template tier="2" #> <Packages> compile Behind the scenes: Split and combine Biml files
  49. 49. <Connections> <Databases> <Schemas> <Tables> <Columns> RootNode <#@ template tier="0" #> <Connections> <Databases> <Schemas> <#@ template tier="1" #> <Tables> <Columns> <#@ template tier="2" #> <Packages> use Behind the scenes: Split and combine Biml files
  50. 50. <Connections> <Databases> <Schemas> <Tables> <Columns> <Packages> RootNode <#@ template tier="0" #> <Connections> <Databases> <Schemas> <#@ template tier="1" #> <Tables> <Columns> <#@ template tier="2" #> <Packages> compile Behind the scenes: Split and combine Biml files
  51. 51. <Connections> <Databases> <Schemas> <Tables> <Columns> <Packages> RootNode <#@ template tier="0" #> <Connections> <Databases> <Schemas> <#@ template tier="1" #> <Tables> <Columns> <#@ template tier="2" #> <Packages> generate Behind the scenes: Split and combine Biml files
  52. 52. RootNode <#@ template tier="0" #> <Connections> <Databases> <Schemas> <#@ template tier="1" #> <Tables> <Columns> <#@ template tier="2" #> <Packages> Behind the scenes: Split and combine Biml files
  53. 53. Don't Repeat Yourself: 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" #> The include directive will be replaced by the content of the included file Include pulls code from the included file into the main file
  54. 54. Don't Repeat Yourself: Include files
  55. 55. Don't Repeat Yourself: CallBimlScript with parameters Works like a parameterized include File to be called (callee) specifies the input parameters it accepts <#@ property name="Table" type="AstTableNode" #> File that calls (caller) passes input parameters <#=CallBimlScript("CommonCode.biml", Table)#> CallBimlScript pushes parameters from the caller to the callee, and the callee returns code
  56. 56. Don't Repeat Yourself: CallBimlScript with parameters
  57. 57. Don't Repeat Yourself: CallBimlScript with parameters
  58. 58. Demo
  59. 59. View compiled Biml Credits: Marco Schreuder (@in2bi) http://blog.in2bi.eu/biml/viewing-or-saving-the- compiled-biml-file-s/ Helper file with high tier (tier="100") Saves output of RootNode.GetBiml() to file
  60. 60. What do you do next? 1. Download BIDS Helper 2. Identify your SSIS patterns 3. Rewrite one SSIS package to Biml to learn the basics 4. Expand with BimlScript 5. Get involved in the Biml community
  61. 61. Biml on Monday... …BimlBreak the rest of the week 
  62. 62. More Biml! Don't miss Rasmus Reinholdt's session Building a meta-driven near realtime ETL solution with BIML and SSIS at 14:55! …and come chat with us in the breaks 
  63. 63. Thank you!  @cathrinew cathrinewilhelmsen.net no.linkedin.com/in/cathrinewilhelmsen contact@cathrinewilhelmsen.net cathrinewilhelmsen.net/biml slideshare.net/cathrinewilhelmsenBiml resources over there!

×