Пропустить столбцы в скрипте BIML SSIS
Я использую следующий BIML-скрипт для создания списка столбцов для каждой таблицы на основе исходной базы данных. Я также добавляю столбец dwh_timestamp. Я использую этот скрипт для создания целевых таблиц, добавляя столбец метаданных.
<Columns>
<# foreach (var column in table.Columns) { #>
<#=column.GetBiml()#>
<# } #>
<Column Name="dwh_timestamp" DataType="DateTime" IsNullable="true"/>
</Columns>
Я использую следующий код для создания пакетов служб SSIS, которые будут импортировать данные из источника.
<DirectInput>SELECT <#=table.GetColumnList()#> FROM <#=table.GetTag("SourceSchemaQualifiedName")#></DirectInput>
Однако это приводит к ошибке, так как исходные таблицы не содержат столбец dwh_timestamp.
Как бы я отфильтровать table.GetColumnList(), чтобы пропустить столбцы с префиксом "dwh_"?
1 ответ
Есть несколько способов отфильтровать список столбцов в Biml.
Вы можете фильтровать имена столбцов или части имен столбцов:
<#=table.GetColumnList(c => c.Name != "dwh_timestamp")#>
<#=table.GetColumnList(c => c.Name.StartsWith("dwh_"))#>
Более подходящим решением является создание аннотаций в столбцах и фильтрация аннотаций:
<Columns>
<# foreach (var column in table.Columns) { #>
<#=column.GetBiml()#>
<# } #>
<Column Name="dwh_timestamp" DataType="DateTime" IsNullable="true">
<Annotations>
<Annotation AnnotationType="Tag" Tag="IsDWHColumn">Yes</Annotation>
</Annotations>
</Column>
</Columns>
<#=table.GetColumnList(c => c.GetTag("IsDWHColumn") != "Yes")#>
Конечно, вы выбираете собственную стратегию аннотации. Возможно, вы захотите использовать "true" и "false" вместо "Yes" и "No" или изменить логику аннотации, чтобы указать, какие столбцы являются исходными столбцами вместо столбцов DWH.