Удалить столбцы из Biml из RootNode

В наших файлах Biml мы строим модель данных в rootnode с использованием GetDataSchema() метод. Пакеты служб SSIS основаны на таблицах и столбцах модели.

Мы хотим иметь возможность удалить столбец из RootNode до компиляции пакетов. Пожалуйста, дайте мне знать, как это можно сделать? Может ли RemoveRootNode(0 метод будет использоваться. Если так. как? Благодарю вас.

1 ответ

Вы можете просто исключить столбец, как показывает Кэтрин, если вы уже материализовали таблицы в коллекцию таблиц. Преимущество этого подхода в том, что полная схема вашей исходной таблицы доступна на тот случай, если кому-то понадобятся исключенные столбцы. Недостатком, конечно, является то, что каждый, кому это не нужно, должен повторять вашу логику исключения.

Другой способ - обработать его, когда вы импортируете свои данные, но до того, как сделать это коллекцией таблиц. Тот же трюк с Катрин, просто в другом месте

Предполагая, что у вас есть два файла. Первый - Environment.biml, который выглядит как

<Biml xmlns="http://schemas.varigence.com/biml.xsd">
    <Connections>
        <Connection Name="CMAdventureWorks2014" ConnectionString="Provider=SQLNCLI11;Data Source=localhost\dev2014;Integrated Security=SSPI;Initial Catalog=AdventureWorks2014" />
    </Connections>
    <Databases>
        <Database Name="AdventureWorks2014" ConnectionName="CMAdventureWorks2014" />
    </Databases>
</Biml>

Вторым является tableImporter.biml

<Biml xmlns="http://schemas.varigence.com/biml.xsd">
    <#
    var connection = RootNode.Connections["CMAdventureWorks2014"];
    List<string> schemaList = new List<string>{"Person"};
    var results = connection.GetDatabaseSchema(schemaList, null, ImportOptions.None);

    #>
    <Tables>
        <!-- Always exclude ModifiedDate from our column emission -->
        <# foreach (var table in results.TableNodes){ #>
        <Table Name="<#=table.Name#>" SchemaName="<#= table.Schema #>">
            <Columns>
                <#  
                // Use whatever logic to build exclusion list
                var excludeList = table.Columns.Where(s => s.Name == "ModifiedDate");
                var output = table.Columns.Except(excludeList);
                #>
                <#= output.GetBiml() #>
            </Columns>
        </Table>
        <# } #>
        <#= results.TableNodes.GetBiml() #>
    </Tables>
    <Schemas>
        <#= results.SchemaNodes.GetBiml() #> 
    </Schemas>
</Biml>

Теперь вы можете проверить, что узлы таблицы не имеют ссылки на ModifiedDate. Поскольку это будет зависеть от tableImporter.biml, нам нужно указать, что он находится на более высоком уровне, чем Environment.biml (уровень 0, поскольку он статический biml), и tableImporter.biml (уровень 1, так как он имеет скрипт biml и не имеет явный уровень определен)

<#@ template tier="10" #>
<Biml xmlns="http://schemas.varigence.com/biml.xsd">
    <Annotations>
    <# foreach (var table in RootNode.Tables) {#>
        <Annotation AnnotationType="Documentation" Tag="<#= table.ScopedName #>"><#= table.GetDropAndCreateDdl() #></Annotation>
    <# } #>
    </Annotations>
</Biml>
Другие вопросы по тегам