Пропустить столбцы в скрипте 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.

Другие вопросы по тегам