23 Março 2016

O que é o Biml?

O Business Intelligence Markup Language (Biml) é uma linguagem de programação utilizada para criar armazéns de dados, business intelligence e outras soluções de dados. Utiliza XML em conjunto com pequenos nuggets de C# ou VB para criar automaticamente scripts SQL, pacotes para SSIS, cubos SSAS e outros objetos que a sua equipa, antes, teria de construir manualmente – normalmente num processo lento, entediante de drag-and-drop sujeito a erros. Além disso, não precisa de instalar nada no servidor. O Biml trabalha sobre a sua estrutura de dados.

É apresentado abaixo uma ilustração do workflow BIML:

Um script BIML simples:

<Biml xmlns=”http://schemas.varigence.com/biml.xsd“>

<Packages>

<Package Name=”Ola Mundo” ConstraintMode=”Linear”>

</Package>

</Packages>

</Biml>

O script acima cria um pacote chamado Ola Mundo

COMO INSTALAR O BIML

Instale a versão mais recente do BIDS Helper no VS e já está. Também pode experimentar o MIST da Varigence que é um IDE que permite gerir todos os seus pacotes. A subscrição após a versão de demonstração custa aproximadamente $250/licença/mês, pelo que não é, provavelmente, a opção ideal para uma ferramenta que funciona sobre o SSIS.

O QUE POSSO FAZER COM O BIML

- Automatizar tarefas repetitivas

Por exemplo, automatizar a criação de DTSx para extrair dados de uma ou várias origens para um ODS. Além disso, é possível alterar dinamicamente o comportamento de cada pacote através de C#. Abaixo é mostrado como criar uma extração em BIML de 1 fonte com todas as tabelas dessa fonte.

Environment.biml

<Biml xmlns=http://schemas.varigence.com/biml.xsd>

<Connections>

<OleDbConnection Name=“Source” ConnectionString=“Provider=SQLNCLI11;Server=SOURCE_SERVER;Initial Catalog=AdventureWorksDW2012;Integrated Security=SSPI;” />

<OleDbConnection Name=“Target” ConnectionString=“Provider=SQLNCLI11;Server=localhost;Initial Catalog=AdventureWorksDW2012;Integrated Security=SSPI;” />

</Connections>

</Biml>

LoadPackages.biml

<# var sourceConnection = RootNode.DbConnections[“Source”]; #>

<# var importResults = sourceConnection.ImportDB(); #>

<Biml xmlns=http://schemas.varigence.com/biml.xsd>

<Packages>

<# foreach (var table in importResults.TableNodes) { #>

<Package Name=“Copy <#=table.Name#>” ConstraintMode=“Parallel”>

<Tasks>

<Dataflow Name=“DFT_CopyData”>

<Transformations>

<OleDbSource Name=“Retrieve Rows” ConnectionName=“Source”>

<DirectInput>SELECT * FROM <#=table.Name#></DirectInput>

</OleDbSource>

<OleDbDestination Name=“Load Rows” ConnectionName=“Target”>

<ExternalTableOutput Table=“<#=table.Name#>” />

</OleDbDestination>

</Transformations>

</Dataflow>

</Tasks>

</Package>

<# } #>

</Packages>

</Biml>

No exemplo acima é criado um DTSx por extração, mas poderíamos reescrever facilmente o código para extrair as várias tabelas num só DTSx:

<# var sourceConnection = RootNode.DbConnections[“Source”]; #>

<# var importResults = sourceConnection.ImportDB(); #>

<Biml xmlns=http://schemas.varigence.com/biml.xsd>

<Packages>

<Package Name=“Copy All” ConstraintMode=“Parallel”>

<Tasks>

<# foreach (var table in importResults.TableNodes) { #>

<Dataflow Name=“DFT_Copy <#=table.Name#> Data”>

<Transformations>

<OleDbSource Name=“Retrieve Rows” ConnectionName=“Source”>

<DirectInput>SELECT * FROM <#=table.Name#></DirectInput>

</OleDbSource>

<OleDbDestination Name=“Load Rows” ConnectionName=“Target”>

<ExternalTableOutput Table=“<#=table.Name#>” />

</OleDbDestination>

</Transformations>

</Dataflow>

<# } #>

</Tasks>

</Package>

</Packages>

</Biml>

E o resultado é:

- Criar e modificar os modelos de desenvolvimento da empresa, com tratamento de erros através de um script biml.

Em produção muitos dos erros nas cadeias de execução são devido à alteração de meta-dados das tabelas origem. Além disso, erros adicionais podem ser injetados quando se tenta resolver esse problema manualmente. Com o BIML, se existir uma alteração de meta-dados, tanto na origem como no destino, só precisa de recriar o pacote executando o script BIML.

CONCLUSÃO

O BIML é muito mais poderoso do que é apresentado neste documento pois pode fazer em BIML o que pode ser feito no Visual Studio. Com um extra, que reside na adaptabilidade do código, conseguida através da integração com C#.

É possível ter uma instalação totalmente desenvolvida em BIML (como acontece já em alguns projetos em várias empresas) no entanto essa mudança é radical e envolve uma alteração completa de paradigma num projeto de ETL. Numa perspetiva prática, o BIML é uma ferramenta para optimizar a produção, quando está em causa muito trabalho repetitivo, por exemplo, extrações de várias fontes.

Com o MIST (propriedade da Varigence) a integração do BIML no seu projeto pode ser mais abrangente ou mesmo total, pois permite, efetuar o reverse engineer das soluções já existentes assim como uma facilidade para efetuar alterações globais aos pacotes geridos pelo MIST.

fontes: http://bimlscript.com/walkthrough/http://www.varigence.com/Documentation/ 

Tags: BIML SSIS  X

Todas as empresas têm a sua forma de fazer as coisas quando criam um DTSx para extração/transformação ou carregamento. O tratamento de erros, as variáveis e as tarefas de registo de erros variam de empresa para empresa, em vários casos, de cliente para cliente.

Quando pretender utilizar um novo modelo só necessita alterar um script no repositório da empresa e, a partir dessa altura, começar a utilizar o script para criar os pacotes SSIS.

Acaba-se a tarefa ingrata de alterar os meta-dados manualmente.

.

.

.

.

     Rui Custódio
       Consultant