BIML. Повторное использование кода.

By | March 3, 2015

Поработав с BIML и накопив некоторое количество проектов, вы наверняка заметите что часто повторно используете некоторый код, например, описание соединений. Есть несколько вариантов упростить поддержку подобных проектов. Самый красивый и эффективный – это использование Transformation, но этот вариант доступен только в программе Mist. Поэтому я пока его не буду рассматривать. Для SSDT есть два других варианта.

Первый вариант – использование инструкции <#include file=имя_файла.biml” #>. Давайте создадим новый biml-скрипт и назовем его referencedFile.biml. Содержимое файла:

<Connections>
<OleDbConnection Name=Source ConnectionString=Provider=SQLOLEDB;Data Source=sql\sql14;Integrated Security=SSPI;Initial Catalog=AdventureWorksDW2014 />
<FlatFileConnection Name=Target” FilePath=E:\\Output.txt” FileFormat=AccountTable />
</Connections>
<FileFormats>
<FlatFileFormat Name=AccountTable” ColumnNamesInFirstDataRow=true >
<Columns>
<Column Name=AccountKey” Delimiter=Comma />
<Column Name=AccountCodeAlternateKey” Delimiter=Comma />
<Column Name=AccountDescription Delimiter=Comma />
<Column Name=AccountType Delimiter=Comma />
<Column Name=Operator Delimiter=LF />
</Columns>
</FlatFileFormat>
</FileFormats>

Как видите, в нем только описание соединений и формата файла. Нет даже корневого узла <Biml>.

А теперь создайте biml-скрипт со следующим контентом:

<Biml xmlns=http://schemas.varigence.com/biml.xsd>
<#@ include file=referencedFile.biml #>
<Packages>
<Package Name=referencedFile ConstraintMode=Parallel >
<Tasks>
<Dataflow Name=Copy_Dim_Account>
<Transformations>
<OleDbSource Name=Src_Dim_Account ConnectionName=Source >
<DirectInput>Select AccountKey, AccountCodeAlternateKey, AccountDescription, AccountType, Operator from DimAccount;</DirectInput>
</OleDbSource>
<FlatFileDestination Name=Dest_Dim_Account ConnectionName=Target Overwrite=true>
</FlatFileDestination>
</Transformations>
</Dataflow>
<ExecuteSQL Name=sql ConnectionName=Source>
<DirectInput>select 1</DirectInput>
</ExecuteSQL>
</Tasks>
</Package>
</Packages>
</Biml>

Обратите внимание на вторую строку. Во время создание пакета движок BIDS Helper просто подставляет в этот файл все содержимое файла referencedFile.biml в текущий скрипт и уже новое содержимое обрабатывает. Таких вставок может столько сколько вам надо.

Второй вариант связан с возможностью параметризации вызываемого кода. Рассмотрим пример. Для начала создадим Biml-скрипт под именем Callee.biml и с простым содержимым:

<#@ property name=tableName type=String #>
<Package Name=Building from <#=tableName#>” ConstraintMode=”Linear” />

Теперь создадим второй Biml-скрипт с содержимым:

<Biml xmlns=http://schemas.varigence.com/biml.xsd>
<
Packages>
<#=CallBimlScript(“Callee.biml“, xxx“) #>
</Packages>
</Biml>

Как видите, мы можем менять значение второго параметра для изменения имени пакета. Таких переменных вы можете сделать несколько. Я не нашел ограничение на их количество.

Рекомендую посмотреть очень интересный пример использования этой функции в блоге Cathrine Wilhelmsen

 

One thought on “BIML. Повторное использование кода.

  1. Pingback: BIML. Сборник статей в этом блоге | Korshikov's

Comments are closed.